6

Vài ngày trở lại, trong một cuộc phỏng vấn một câu hỏi được hỏi với tôi như,Chức năng gọi lại và truyền thông liên tiến trình có giống nhau không?

Are function callback in C and interprocess communication are same? 

Tôi đã chút không rõ ràng trong question.Because rằng tôi đang ở trong một tình trạng khó xử. Trong IPC, chúng ta giao tiếp giữa quá trình để xử lý ở cuối nếu chúng ta thấy quá trình không là gì ngoài chức năng. Ở đây một hàm gọi hàm khác. Trong hàm gọi lại, chúng ta sử dụng function pointer một lần nữa, đó là một hàm gọi hàm khác với địa chỉ. Vì vậy, chỉ muốn biết mặc dù chúng không hoàn toàn giống nhau, vậy sự khác biệt là gì?

Trả lời

10

Không, không thực sự.

Chức năng gọi lại đang chuyển địa chỉ (hoặc một số số nhận dạng khác) của một hàm đến một hàm khác để nó có thể gọi lại vì một lý do nào đó.

Ví dụ cổ điển là thư viện chuẩn của hàm qsort. Bạn chuyển một con trỏ tới mảng (và các kích thước của nó), cùng với một hàm so sánh. Hàm qsort sau đó sử dụng hàm so sánh đó (gọi lại) để quyết định xem có bất kỳ hai phần tử nào trong danh sách lớn hơn để nó có thể sắp xếp chúng theo thứ tự hay không.

IPC, mặt khác, là một phương tiện cho các quá trình giao tiếp với nhau, chẳng hạn như bộ nhớ dùng chung, đường ống, semaphores và vv.

Một số cơ chế IPC có thể sử dụng gọi lại nhưng không cần thiết. Ví dụ: ổ cắm không sử dụng gọi lại, chúng chỉ cho phép người dùng gọi readwrite.

Tương tự với bộ nhớ dùng chung, bạn đính kèm vào khối bộ nhớ và chỉ cần truy cập chúng giống như bộ nhớ "thông thường", nó chỉ là cảm nhận trên tất cả các quy trình được gắn với bộ nhớ đó.

Một trong đó không loại gọi lại là ONC RPC (hoặc Sun RPC). Nó chạy một máy chủ đang chờ các cuộc gọi của khách hàng qua mạng và chuyển chúng đến một chức năng máy khách được cấu hình trước. Chi tiết hơn có thể được tìm thấy here.

Nhưng, thậm chí sau đó, tôi sẽ do dự gọi đó là một cuộc gọi lại vì nó thực sự được cấu hình tại thời gian biên dịch. Các callback "đúng" có xu hướng được thực hiện trong thời gian chạy.

+1

+1 không thể đánh bại câu trả lời này (đơn giản này) một cách đơn giản và toàn diện –

+0

@paxdiablo: Chức năng gọi lại: -Một số lý do có nghĩa là nhận được một số dữ liệu ... do đó chúng tôi nhận được từ IPC bằng cách sử dụng ổ cắm hoặc đường ống và tất cả –

+0

"Một số cơ chế IPC có thể sử dụng gọi lại nhưng không cần thiết." - Sẽ tốt nếu điều này có thể được xây dựng. – Jay

6

Một hàm gọi lại có nghĩa là người gọi và callee nằm trong cùng một chuỗi. IPC là trong các quá trình khác nhau. một quá trình bao gồm một hoặc nhiều luồng. Ergo, callbacks không phải là IPC.

Các vấn đề liên quan