操作系统并发编程

nber1994

All
Posts
Categories
Tags
About

操作系统并发编程

    ❐os


现代操作系统提供了三种构造并发程序的方法 1.进程 每个逻辑控制流都是一个进程,由内核来调度和维护,所以控制流之间通信可以采用IPC进程间通信技术

2.I/O多路复用 在这种形式的并发编程中,应用程序在一个进程的向下文中显示的调度自己的逻辑流。逻辑流被模型化为状态机,数据到达后,主程序显示的从一个状态转换为另一个状态。

3.线程 运行在一个单一进程上下文中的逻辑流,由内核进行调度

基于进程的并发编程 如何工作

服务器监听了描述符3, 客户端1连接上以后,服务端分配了fd4给客户端1,并且派生一个子进程, 关闭主进程的fd4,同时在子进程的文件描述符表中,关闭fd3。 父子进程文件描述符表都指向了同一个文件表项。 从此父进程继续接受请求,子进程提供服务

基于进程的并发服务器 优缺点: 优点:进程存在独立的内存空间,这样避免了内存互相覆盖的迷惑 缺点:进程间共享状态十分困难,必须使用IPC(进程间通信),但是IPC一般开销比较高

基于I/O多路复用的并发编程 一个进程某一时刻,只能处理一个事件,为了解决这个问题,可以借助select函数,要求内核将进程挂起,只有在一个或多个I/O事件发生后,才将控制权返回给应用程序

一般实现的逻辑是,将逻辑流模型转化为一个状态机。

I/O多路复用的技术的优劣 优点: 1.相比较基于进程的并发技术,I/O多路复用提供给程序员对程序行为的控制 2.所有的逻辑控制流是在一个进程中的,所以不同的逻辑流可以共享数据十分方便

缺点: 1.编码复杂 2.不能充分利用多核

基于线程的并发编程 可以看为基于进程&IO多路复用的结合

进程就是运行在进程中上下文中的逻辑流.线程是由内核调度的,且每个线程都有其自己的线程上下文,还包括一个唯一的线程ID,栈,栈指针等。所有运行在一个进程里的线程共享改进程的整个虚拟地址空间。

线程与进程的区别

1.线程的上下文比进程的上下文小的多,因而线程的切换比进程的切换更快 2.线程没有严格的父子继承关系,只有主线程和对等线程的区别,一般主线程是进程中第一个线程 3.对等线程池内的对等线程可以杀死或者等待对等线程,且各个线程之间可以共享数据,拥有相同的堆块,但是用户栈确是不同的

线程异步服务的代码实现 主线程等待请求到达,当接收到一个请求后,创建一个对等线程对请求进程处理

基于预线程化的并发服务器 基于预线程化的并发服务器会事先初始化好一个线程池 使用线程提高并发性 线程并发的程序,在多核处理器中常常有很好的性能,因为内核会在多个核上并发的调度线程

并行程序是运行在多个处理器上的并发程序

同步多个线程的方法 控制对共享数据的并发访问,基于一种叫做信号量的特殊类型变量的方法。 信号量是非负整数的全局变量,P操作会将s减一,而V操作会将s加一,且都是原子操作 基于二原信号量的同步也常常成为互斥锁,对互斥锁进行P操作叫做加锁,V操作为解锁

不过对于这种同步方式,开销是十分大的,应该尽可能的避免这种方式