多进程/线程通讯

本文介绍了两种常见的进程间通信(IPC)方式:共享内存(ShareMemory)和客户端/服务器(C/S)模式。共享内存适用于系统状态未知的情况,如木马等场景;C/S模式通常通过Socket实现,Socket是一种应用编程接口(API),用于TCP/IP协议栈,由操作系统提供。

 

有两种方式

1。共享内存(ShareMemory) ,在系统内开辟空间,对于系统状态未知的情况比较适用,比如木马等

2。C/S模式,通常是通过Socket实现,其中对于Socket的解释在Wiki上看了一段,感觉写的很好,很有意思,直接原封摘过来,如下

     The term Internet sockets is also used as a name for an application programming interface (API) for the TCP/IP protocol stack, usually provided by the operating system. Internet sockets constitute a mechanism for delivering incoming data packets to the appropriate applicationprocess or thread, based on a combination of local and remote IP addresses and port numbers. Each socket is mapped by the operational system to a communicating application process or thread.

### Linux 系统中的进程线程 #### 进程的概念 在Linux系统中,进程是一个正在运行的程序实例。每个进程都有其独立的地址空间、打开文件列表和其他状态信息[^4]。为了管理和调度这些实体,Linux内核为每一个进程维护了一个`task_struct`结构体,该结构包含了描述进程所需的各种属性。 #### 线程的概念 线程则是进程中更细粒度的任务单位,它共享所属进程内的大部分资源如内存地址空间等,但拥有自己独立的栈指针、寄存器集合以及一些局部变量[^5]。这意味着在同一应用内部可以并行执行个不同的计算流或I/O操作而不必重复加载相同的上下文环境。 #### 主要区别 - **资源占用**: 进程具有完整的私有数据段(包括堆栈),而同一进程下的各线程间则共用了绝大部分的数据区域; - **通信成本**: 同一进程里的线程之间可以直接访问彼此的数据成员,因此它们之间的同步开销较小;相反地,跨进程通讯通常需要借助于消息队列等方式来进行交互,这增加了额外的时间消耗; - **创建销毁代价**: 新建一个子进程往往涉及复制父代的所有者权限表项等内容,所以相对耗时较长;相比之下启动新线程的速度更快因为只需要初始化少量的新对象即可[^1]。 #### 创建方式 当涉及到具体编程实践时,可以通过如下命令来分别建立新的进程线程: 对于C/C++语言来说, ```c++ #include <unistd.h> // For fork() pid_t pid; pid = fork(); // Create a child process. if (pid == 0){ printf("This is the child process.\n"); } else { wait(NULL); // Wait for the termination of the child process. } ``` 而对于POSIX标准兼容的语言,则可利用pthread库函数实现线程开发: ```cpp #include<pthread.h> void* thread_function(void *arg){ /* Thread code here */ } int main(){ pthread_t tid; int ret=pthread_create(&tid,NULL,thread_function,(void*)NULL); if(ret!=0){ perror("Thread creation failed"); exit(EXIT_FAILURE); } pthread_join(tid,NULL); return 0; } ``` #### 调度机制 Linux采用了一套复杂的算法用于决定何时切换当前活动的工作单元—不论是进程还是线程,并赋予适当级别的CPU时间片给各个待处理的对象。值得注意的是,在一个核心架构下,虽然单个处理器上的优先级设定仍然有效,但对于跨越不同物理芯片的情况而言,这种影响变得不再显著[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值