gpt4 book ai didi

协调多个进程之间共享监听套接字的接受

转载 作者:太空宇宙 更新时间:2023-11-04 03:01:02 25 4
gpt4 key购买 nike

在多个进程之间协调接受监听套接字的最佳方式是什么?

我正在考虑以下两种方式之一:

  • 有一个“主”进程,当轮到每个进程开始接受连接时,它会向每个进程发送一条消息。

    所以顺序是:

    Master 进程将 token 交给 Worker A。Worker A 接受连接,将 token 返回给 Master 进程。 Master进程给Worker B等token。

  • 每个进程都有一个接受线程,该线程将围绕共享互斥体旋转。锁定互斥锁,接受连接,释放锁。

有什么更好的主意吗?

  • 当连接进入时,所有进程都会被唤醒。在接受连接之前,他们尝试锁定一个共享的互斥量。第一个锁定互斥锁的人接受连接。

最佳答案

我也认为主解决方案是不错的选择:

/* Process struct */
typedef struct _process_t {
unsigned long process_id;
struct _process_t *next; /* next process */
struct _process_t *prev; /* previous process */
struct _process_master *master_process; /* Master process */
int (*accepting_socket) (struct _process_t *); /* process accepet function */
char *received_data_buffer; /* the data received over the socket */
} process_t;

/* List of process */
typedef struct _process_list {
process_t *head;
process_t *tail;
int count;
} process_list;

/* The master process */
typedef struct _process_master {
process_list socket_listners; /* All the process listening */
process_list ready_listners; /* Process ready to listen and receive*/

..... /* Complete this struct */
} process_master;

如果你发现进程的解决方案很慢,你可以使用线程代替(它们共享相同的内存),但代码可能会增加复杂性并且很难跟踪错误。

由于获取互斥锁的成本和所有进程之间的上下文切换,第二种解决方案并不比第一种快。

关于协调多个进程之间共享监听套接字的接受,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11906729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com