1. libuv-进程
1.1. 简介
libuv提供子进程的管理工作,抽象平台的差异性,允许通过stream和pipe进行线程之间的交互
unix建议每个进程只做一件事并且做好。所以一个进程常常使用多个子进程来完成各种任务,类似于shell中使用多个pipe。与线程共享内存类似,含有消息的多进程模型也很简单。
基于事件的程序想利用现代计算机的多核功能是有一定挑战性的。在多线程程序里,内核可以通过调度把不同的线程分配到不同的系统核core上来提供core的利用率。但是libuv的loop只有一个线程,通过变通的使用多进程,每个进程上运行一个loop,每个进程关联到不同的core上以达到利用多核系统。
1.2. API
typedef enum {
UV_IGNORE = 0x00,
UV_CREATE_PIPE = 0x01,
UV_INHERIT_FD = 0x02,
UV_INHERIT_STREAM = 0x04,
UV_READABLE_PIPE = 0x10,//只读 pipe, 前提是 UV_CREATE_PIPE 被设置
UV_WRITABLE_PIPE = 0x20,//只写 pipe, 前提是 UV_CREATE_PIPE 被设置
UV_NONBLOCK_PIPE = 0x40,//非阻塞 pipe, 前提是 UV_CREATE_PIPE 被设置
UV_OVERLAPPED_PIPE = 0x40 /* old name, for compatibility */
} uv_stdio_flags;
typedef struct uv_stdio_container_s {
uv_stdio_flags flags;
union {
uv_stream_t* stream;
int fd;
} data;
} uv_stdio_container_t;
enum uv_process_flags {
UV_PROCESS_SETUID = (1 << 0),//手动设置 UID ,window无效
UV_PROCESS_SETGID = (1 << 1),//手动设置 GID ,window无效
UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS = (1 << 2),//参数不使用引号,并且没有任何转义,window专用
UV_PROCESS_DETACHED = (1 <&

本文介绍libuv提供的进程管理功能,包括子进程创建、父子进程分离、信号发送、I/O交互和管道通信等内容。
最低0.47元/天 解锁文章
1679

被折叠的 条评论
为什么被折叠?



