1. 操作系统基本知识,进程,线程 CPU是计算机的核心,承担了所有的计算任务: 操作系统是计算机的管理者,它负责任务的调度.资源的分配和管理,统领整个计算机硬件:那么操作系统是如何进行任务调度的呢? 1.1 任务调度 大部分操作系统(如Windows.Linux)的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行.任务执行的一小段时间叫做时间片,任务正在执行时的状态叫运行状态,任务执行一段时间后强制暂停去执行下一个任务,被暂停…
硬件的效率与一致性 基于高速缓存的存储交互很好的解决了处理器和内存的速度矛盾,但是也为计算机系统带来了更高的复杂度,因为引入了一个新问题:缓存一致性. 在多处理器系统中,每个处理器都有自己的高速缓存,而他们又共享同一主内存(Main Memory),如上图所示.当多个处理器的运算任务都涉及到主内存中的同一块区域,那么将高速缓存中的数据同步回主内存时,到底以谁的缓存数据为准呢?为了保证数据的一致性,需要各个处理器访问缓存时都遵循一些协议,即缓存一致性协议. Java内存模型 Java虚拟机规范中试…
文中所讲基本都是以非阻塞IO.异步IO为基础.对于阻塞式IO,下面的编程模型几乎都不适用 Reactor三种线程模型 单线程模型 单个线程以非阻塞IO或事件IO处理所有IO事件,包括连接.读.写.异常.关闭等等.单线程Reactor模型基于同步事件分离器来分发事件,这个同步事件分离器,可以看做是一个单线程的while循环.下图描述了单线程模型的处理过程,看起来与网上大部分资料的图片不同,但本质是相同的. 注意上面的Selector之所以会有OP_ACEEPT事件,是因为在单线程模型中,Selec…
进程部分 一:进程间通信IPC机制:由于进程之间的内存空间是相互隔离的,所以为了进程间的通信需要一个共享的内存空间, 但是共享带来的问题是数据在写的时候就不安全了,所以需要一种机制既有能共享的内存 空间,又能解决锁的问题. 有两种解决方案:一种叫管道,另一种叫队列.其中队列就是管道加锁实现的.这两种方式 占用的都是内存空间,但是管道无法解决锁的问题,所以还是要选择队列.例图1: 二:生产者消费者模型: 1:什么是生产者消费者模型: 生产者:代指生产数据的任务 消费者:代指处理数据的任务 该模型的…
六 守护线程 无论是进程还是线程,都遵循:守护xxx会等待主xxx运行完毕后被销毁 需要强调的是:运行完毕并非终止运行 #1.对主进程来说,运行完毕指的是主进程代码运行完毕 #2.对主线程来说,运行完毕指的是主线程所在的进程内所有非守护线程统统运行完毕,主线程才算运行完毕 详细解释: #1 主进程在其代码结束后就已经算运行完毕了(守护进程在此时就被回收),然后主进程会一直等非守护的子进程都运行完毕后回收子进程的资源(否则会产生僵尸进程),才会结束, #2 主线程在其他非守护线程运行完毕后才算运行…
Pthread线程使用模型之三 客户端/服务端模型(Client/Server) 场景 1.在客户端/服务端模型时,客户端向服务端请求一些数据集的操作. 服务端执行执行操作独立的(多进程或跨网络)– 客户端可以等待服务端响应再做其他任务或者做一些并行的操作,在一段时间后被通知时再去查询结果. 虽然客户端等待服务端是最简单的方式, 但是这种情况极少使用, 因为它不具备速度和性能优势, 同步的只适合获取一些普通的资源. 比如Socket i/O的非阻塞或异步模型. 2.在做一些复杂的命令行程序时(单…
场景 1.经常在Windows, MacOSX 开发C多线程程序的时候, 经常需要和线程打交道, 如果开发人员的数量不多时, 同时掌握Win32和pthread线程 并不是容易的事情, 而且使用Win32线程并不能写出跨平台的实现. 所以在成本的制约下选用pthread作为跨平台线程库的首选. 有足够人力的公司可以再封装一层对Win32和本地pthread的调用. 比如 chrome. 2.线程在做高可用, 高性能的程序时必不可少, 比如Socket, 并发任务, 顺序任务,文件下载等需要充分利…
overview 同步基元分为用户模式和内核模式 用户模式:Iterlocked.Exchange(互锁).SpinLocked(自旋锁).易变构造(volatile关键字.volatile类.Thread.VolatitleRead|Thread.VolatitleWrite).MemoryBarrier. 重要内容来源:C# 中的线程处理 - 第 4 部分 - 高级线程处理 (albahari.com) ==========================volatile简介(多语言共性)=…
eventloop的基本概念可以参考:http://www.ruanyifeng.com/blog/2013/10/event_loop.html Eventloop指的是独立于主线程的一条线程,专门用来处理IO事件,而如果Eventloop一个不够用,可以开多个. Eventloop底层也要基于异步的网络调用.文件调用才能发挥最大的作用. 可以看到,由于多出了橙色的空闲时间,所以主线程得以运行更多的任务,这就提高了效率.这种运行方式称为"异步模式"(asynchronous I/O)…