APUE(Unix环境高级编程)
总结语Unix环境高级编程这本书,再加上自己平时学习记录,主要包括进程,线程等知识
梦小羊
系统软件工程师
展开
-
进程间通信(IPC)----Unix域socket(命名socket)
简介提到socket套接字,就不得不想到网络socket编程,在服务器与客户端的程序编写时,都会使用到 socket() 函数来创建一个用于tcp通信的套接字,在使用connect()与bind() 连接或者监听,这是用于客户端与服务器端的通信,然而,在进程间通信(IPC)中同样可以用到socket() 这个函数来创建通信的套接字,我们称之为Unix域socket 或 命名socket;命名s...原创 2020-03-23 15:40:01 · 2405 阅读 · 1 评论 -
进程间通信(IPC)---- 消息队列
由于无名管道与命名管道的局限性,无法满足两个以上的进程间通信,即进程网状通信,对于网状通信,我们可以类比计算机网络中的通信方式,例如,多台主机如果需要通信,我们可以使用一个路由器:各pc之间通过有线或者无线连接到路由器,要想其他pc发送数据时,直接将数据发送给路由器,将所有pc连接到路由器,路由器就会根据接收到的消息,处理后发送到指定的ip的pc上;而消息队列,与这种方式就有些类似,我们在发送...原创 2020-03-17 17:03:43 · 381 阅读 · 0 评论 -
进程间通信(IPC)---- 命名管道以及信号SIGPIPE的捕捉
命名管道的特点命名管道也叫有名管道(FIFO),他有以下特点:能够用于非亲缘进程之间的通信,当然亲缘进程肯定也可以;命名管道和无名管道原理类似,都是通过在进程之间开辟一点中间介质,不同的进程通过往这个介质中读写内容,即完成了信息的收发;顾名思义,命名管道同无名管道相比就是因为他有名,那就是文件名,文件件都可以使用open() 函数打开并返回一个文件描述符,所以,我们就不用指定...原创 2020-03-15 13:21:25 · 859 阅读 · 0 评论 -
进程间通信(IPC) ---- 无名管道
当程序开始执行,进入 main() 函数后,父进程创建,当调用 fork() 创建子进程后,两个进程间常常需要传输数据,但多进程与多线程不同,进程间是无法共享内存的,所以进程间的通信就尤为重要,无名管道(pipe)就是用来解决进程间通信的其中一种方法。但仅仅用在有亲缘关系的进程中,这又是为什么呢?无名管道通信原理具体来说,就是内核开辟一个管道,通过往这个管道里读写内容,从而完成数据的传输;管...原创 2020-03-11 23:08:38 · 575 阅读 · 0 评论 -
多线程编程与锁
在多进程中,每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系; 通过增加 CPU,就可以容易扩充性能 ;可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系; 每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大,但是,逻辑控制复杂,需要和主程序交互; 需要跨进程边界,如果有大数据量传送,就不太好,适合小...原创 2020-03-02 11:36:10 · 432 阅读 · 0 评论 -
Linux信号(signal)机制
一、什么是信号1.信号本质软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部...原创 2020-03-01 12:25:18 · 773 阅读 · 0 评论 -
多进程相关概念与编程
在之前的学习中,掌握了socket编程,学会了如何编写一个客户端程序和服务器程序并且实现两者之间的连接,可是存在一个很大的问题,那就是我所编写的服务器最多只能服务一个客户端,而服务器并不能这样。一.服务器并发访问指的是一个服务器在运行的时候,可以接受多个客户端的访问。Linux下通常有三种实现并发服务器的方式:多进程并发服务器,多线程并发服务器,多路复用。这篇博客是我对多进程学习的一个梳理,...原创 2020-02-19 10:02:59 · 225 阅读 · 0 评论