深圳网站建设售后服务怎样,短剧小程序搭建,织梦商城网站模板,长沙有哪些软件公司一、多核、多cpu
#xff08;一#xff09;多核 Multicore 核是CPU最重要的部分。负责运算。核包括控制单元、运算单元、寄存器等单元。 多核就是指单个CPU中有多个核。
#xff08;二#xff09;多cpu Multiprocessor 多cpu就是一个系统拥有多个CPU。每个CPU可能有单个核…一、多核、多cpu
一多核 Multicore 核是CPU最重要的部分。负责运算。核包括控制单元、运算单元、寄存器等单元。 多核就是指单个CPU中有多个核。
二多cpu Multiprocessor 多cpu就是一个系统拥有多个CPU。每个CPU可能有单个核也可能有多个核。
三区别 多核CPU和多CPU的区别主要在于性能和成本。 多核CPU性能最好但成本最高 多CPU成本小但性能较差。
二、并发、并行
一并发 Concurrency 并发是多个事件在同一时间段内发生并不是在同一个时刻发生。通过频繁的分时交替运⾏给⼈的感觉是同时运⾏因为分时交替运⾏的时间是⾮常短的。比如执行0.001sA然后暂停A执行0.001sB然后暂停B执行0.001sA如此反复。
二并行 Parallelism 并行是指多个事件在同一时刻发生。比如同时执行A和B。
三并发和并行的区别 并发是轮流处理而并行是同时处理。 并发和并行的区别就是一个人同时吃三个菜和三个人每人吃一个菜 单核不能并行只能并发。 多核或者多cpu既能并行也能并发。
1.并行但不并发 执行完A才能执行B但执行A时其中的各个子任务可以在同一时刻同时执行。 2.并发但不并行 执行A时可以突然中断A转去执行B执行完B后再去执行A。 3.并发且并行 执行A和B时不仅可以互相打断还可以在同一时刻同时执行A和B。
三、进程、线程、协程
一进程 Process 进程是程序的一次执行过程。 每个进程都有⼀个独⽴的内存空间拥有自己独立的堆和栈既不共享堆亦不共享栈。 同一个程序可以执行多次这样就产生了多个进程这多个进程都是独立的。类似于一个类产生多个实例。 进程由操作系统调度。 进程可以创建子进程。
二线程 Thread 线程是进程中的⼀个执⾏单元负责当前进程中程序的执⾏⼀个进程中⾄少有⼀个线程。 线程拥有自己独立的栈和共享的堆共享堆不共享栈。 线程亦由操作系统调度。
单线程和多线程 1.单线程 当进程只有一个线程时就是单线程。 2.多线程 当进程有多个线程时就是多线程。
三协程 Coroutine 协程又称微线程纤程。 协程和线程一样共享堆不共享栈但协程由程序员调度。同时协程也无法使用多核。
四多线程与多进程的区别 多线程与多进程的目的都是想尽可能的利用CPU资源减少CPU的空闲时间特别是多核环境。 多进程它最大的优点是稳定性高因为一个子进程崩溃不会影响其他进程但创建进程的开销巨大操作系统能同时运行的进程数也是有限的。 多线程比多进程快但是致命缺点是任何一个线程崩溃都造成整个进程的崩溃因为所有线程共享进程的内存。
四、同步、异步
同步和异步关注的是消息通信机制。
一同步 synchronous 同步就是一个任务在执行某个请求的时候如果这个请求返回需要很长时间那么这个任务会不断询问是否已返回信息直到收到返回信息才继续执行。
二异步 asynchronous 异步就是一个任务在执行某个请求的时候它不会询问是否已返回而是继续执行下面的操作当返回信息时再通知这个任务。
三区别 区别在于消息通信方向相反。同步是调用方通知被调用方异步是被调用方通知调用方。同步是调用方主动查询异步是调用方被动接收。 比如甲方委托乙方生产衣服甲方隔两天问乙方生产完了吗这叫同步甲方不问而是等到乙方生产完了通知甲方这叫异步。
多线程和异步都可以避免阻塞但异步和多线程不是一个概念。 多线程编程简单。有调度开销。并且线程间的共享变量可能造成死锁的出现。 异步使用回调的方式没有调度开销在设计良好的情况下处理函数可以不必使用共享变量减少了死锁的可能。编写异步操作的复杂程度较高程序主要使用回调方式进行处理与普通人的思维方式有些出入而且难以调试。
适用范围 当需要执行I/O操作时使用异步操作比使用多线程更合适。 长时间CPU运算的场合使用多线程更合适。例如耗时较长的图形处理和算法执行。
五、阻塞、非阻塞
阻塞与非阻塞关注的是程序在等待调用结果时候的状态。涉及CPU线程调度。
一阻塞 Blocking 就是调用结果返回之前该线程会挂起不释放CPU执行权但也不做其它事情只能等待只有等到调用结果返回了才能接着往下执行
二非阻塞 Non-blocking 就是在没有获取调用结果时会释放cpucpu不会等待。 如果是同步的通过轮询的方式检查有没有调用结果返回如果是异步的会通知回调
三区别 在于是否释放cpu 阻塞是cpu空转白白浪费 非阻塞是cpu不会空转。
例子 1.同步阻塞 老张在厨房用普通水壶烧水一直在厨房等着阻塞盯到水烧开同步 2.同步非阻塞 老张在厨房用普通水壶烧水在烧水过程中就到客厅去看电视非阻塞然后时不时去厨房看看水烧开了没 同步主动询问 3.异步阻塞 老张在厨房用响水壶烧水一直在厨房中等着阻塞不用盯着而是等到水壶发出响声异步老张知道水烧开了 4.异步非阻塞 老张在厨房用响水壶烧水在烧水过程中就到客厅去看电视非阻塞当水壶发出响声异步老张就知道水烧开了
例子 如果你想吃一份宫保鸡丁盖饭 同步阻塞你到饭馆点餐然后在那等着还要一边喊好了没啊 同步非阻塞在饭馆点完餐就去遛狗了。不过溜一会儿就回饭馆喊一声好了没啊 异步阻塞你到饭馆点餐然后在那等着不喊而是等做好了给你端上来。 异步非阻塞在饭馆点完餐就去遛狗了。等做好了饭店给你打电话。
六、io
I/O操作包括文件读写、数据库操作、网络请求等。 I/O操作不消耗CPU时间 同步阻塞IOBlocking IOBIO 同步非阻塞IONon-blocking IONIO 异步阻塞IO IO multiplexingIO多路复用 异步非阻塞IO 异步IOAsynchronous IOAIO
适用场景: BIO适用于连接数目比较小且固定的架构这种方式对服务器资源要求比较高并发局限于应用中但程序直观简单易理解。 NIO适用于连接数目多且连接比较短轻操作的架构比如聊天服务器并发局限于应用中编程比较复杂。 AIO使用于连接数目多且连接比较长重操作的架构比如相册服务器充分调用OS参与并发操作编程比较复杂
七、多任务
要实现多任务通常会设计成Master-Worker模式Master负责分配任务Worker负责执行任务因此多任务环境下通常是一个Master多个Worker。 多任务可以使用多线程或者多进程。 如果用多线程实现Master-Worker主线程就是Master其他线程就是Worker。 如果用多进程实现Master-Worker主进程就是Master其他进程就是Worker。 无论是多线程还是多进程只要Worker数量一多效率肯定上不去因为Worker一多CPU就忙着切换工作根本没多少时间去执行任务了。
是否采用多任务还得考虑任务类型。 可以把任务划分为计算密集型和IO密集型。 计算密集型任务的特点是大量的计算消耗CPU的资源比如视频解码、计算圆周率。这种任务同时进行的数量应当等于CPU的核心数这么做是为了降低切换任务所需要的时间并且它还适合使用运行效率高的代码编写 IO密集型任务特点是CPU消耗很少任务的大部分时间都在等待IO操作完成。对于这类任务任务越多CPU效率越高但也有一个限度。