广元网站建设专业人员,做粘土网站,外国客户网站,国内永久免费crm系统小说1.并发并发#xff1a;逻辑流在时间时重叠构造并发程序#xff1a;进程#xff1a;每个逻辑控制流是一个进程#xff0c;由内核调度和维护进程有独立的虚拟地址空间#xff0c;想要通信#xff0c;控制流必须使用某种显式的进程间通信机制(IPC)I/O多路复用#xff1a;程…1.并发并发逻辑流在时间时重叠构造并发程序进程每个逻辑控制流是一个进程由内核调度和维护进程有独立的虚拟地址空间想要通信控制流必须使用某种显式的进程间通信机制(IPC)I/O多路复用程序在一个进程的上下文显式地调度自己的逻辑流逻辑流被模型化为状态机数据到达文件描述符后主程序显式地从一个状态转换到另一个状态程序是一个单独的进程所有的流共享同一个地址空间线程运行在单一进程上下文的逻辑流由内核调度像进程流一样由内核调度像I/O多路复用一样共享同一个地址空间2.基于进程在父进程中接受客户端连接请求创建新的子进程提供服务共享文件表但不共享用户地址空间3.基于I/O多路复用使用select函数要求内核挂起进程只有在I/O事件发生后才将控制返回给程序select处理描述符集合看成一个大小为n的位向量select函数会一直阻塞直到读集合中至少有一个描述符准备好可以读当且仅当一个从该描述符读取一个字节的请求不会阻塞时描述符k就表示准备好可以读了状态机就是一组状态、输入事件、转移粒度每个逻辑流每个时间片执行的指令数量基于I/O多路复用的事件驱动程序每个逻辑流都能访问该进程的全部地址空间4.基于线程(thread)线程是运行在进程上下文的逻辑流程序是由每个进程中一个线程组成的每个线程都有自己独立的线程上下文包括线程ID、栈、栈指针、PC、CC、通用目的寄存器值每个线程和其他线程共享进程上下文的剩余部分包括整个用户虚拟地址空间由只读文本、读/写数据、堆、所有的共享库代码和数据区域组成线程共享打开文件的集合一个线程的上下文比进程的更小切换更快主线程和其他对等线程的区别仅在于它总是进程中第一个运行的线程每个对等线程都能读写相同的共享数据线程的代码和本地数据被封装在一个线程例程中pthread_create函数创建线程pthread_join函数会阻塞直到线程终止可结合的线程能被其他线程回收和杀死在被其他线程回收前它的内存资源(栈)不释放分离的线程不能被其他线程回收和杀死内存资源在它终止时由系统自动释放寄存器从不共享虚拟内存总是共享若一个线程得到了一个指向其他线程的栈的指针则它可以读写这个栈的任何部分变量是共享的当且仅当它的一个实例被一个以上的线程引用5.用信号量同步线程共享变量引入了同步错误的可能性互斥临界区不应该与其他进程的临界区交替执行信号量s是非负整数的全局变量初始化为1只能由两种操作处理P(s)测试若s非0则减1若s为0则挂起V(s)增加s加1以提供互斥为目的的二元信号量称为互斥锁P为加锁V为解锁生产者-消费者问题插入和取出项目都涉及更新共享变量必须保证对缓冲区的访问互斥和调度缓冲区减少抖动读者-写者问题写者必须有对对象独占的访问读者可以和无限多个读者共享对象饥饿一个线程无限期阻塞无法进展基于预线程化的并发服务器6.竞争、死锁竞争一个程序的正确性依赖于一个线程要在另一个线程到达y点之前到达它的控制流中的x点程序员假定线程将按照某种特殊的轨迹线穿过执行空间而忘记多线程的程序必须对任何可行的轨迹线都正确工作死锁一组进程被阻塞了 等待一个永远不会为真的条件