亲宝软件园·资讯

展开

并发系列64章(并发概要)第一章

族语1996 人气:0
### 前言 初学并发的时候一想到并发,然后就和多线程对等了。这就有一丢丢狭隘了,比如说node是单线程,但是人家可以高并发。说明并发并不是一个简单的多线程问题。 同样很多人说硬件cpu的发展为并发提供基础,在这里也可以看出是其实是为多线程提供基础,为并发提供发展道路。 并发的优点在操作系统单核的时候就体现了,最好的体现就是操作系统中线程的调度。而我们能做哪种并发,取决于操作系统能做哪种并发,没有人会以为自己写的程序真的能创建线程。 下面是个人的一些使用过得并发路子,由于接触有限只是用下面4种。 ![](https://img2020.cnblogs.com/blog/1289794/202004/1289794-20200402111313642-895768612.png) ### 正文 1.多线程 采用多个线程来执行程序。在此指狭隘的多线程概念,比如说一个程序,执行不同类型的任务采用不同的线程,这些线程一直伴随着程序的生命周期。 2.并行处理 是多线程中的一种。把正在执行的大量任务分割成小块,分配给多个同时运行的程序。 下面是百度百科的概念: ``` 并行处理(Parallel Processing)是计算机系统中能同时执行两个或多个处理的一种计算方法。并行处理可同时工作于同一程序的不同方面。并行处理的主要目的是节省大型和复杂问题的解决时间。 为使用并行处理,首先需要对程序进行并行化处理,也就是说将工作各部分分配到不同处理进程(线程)中。并行处理由于存在相互关联的问题,因此不能自动实现。另外,并行也不能保证加速。从理论上讲,在 n 个并行处理的执行速度可能会是在单一处理机上执行的速度的 n 倍。 ``` 狭隘的多线程解决不同类型的任何互不干预。而并行处理则是从任务的角度分割,切换成小而完整的任务,利用多线程去实行并行处理。 之所以会有这种模式,是因为我们会有大的任务,这会影响其他任务的执行,不可能把苹果都放在一个篮子里面。 3.异步编程 它采用future模式或者回调模式机制,以避免产生不必要的线程。 为什么会产生这种概念呢?是因为比如A线程,要等待B线程的结果才能继续运行,这就有很大的问题了。 一个线程运行到一半去请求B的数据,尴尬不?这不符合多线程的理想情况,理想情况是不干预啊。 以人的思维来说,一件事情A做到一半,要等待另外一件事情B完成。万一B干到一半出事了呢?那么A是不是尴尬了? 这样一想是不是一个尴尬的问题?对电脑来说,就更是了。 举一个例子: 我们知道js调用浏览器的api来实现对后台的访问的,我们打开一个网页一下子会请求很多数据,但是呢,即使网页加载到一半的时候我们可以操作网页,比如我们的点击操作,这一部分会调用js代码。 而且我们知道js是单线的,也就是说js掉完浏览器的api之后,并没有阻塞我们的js这条单线。但是当服务器返回的时候我们的页面又有数据了。这是因为浏览器当结果返回的时候,会调用我们的js方法。 这个js方法就是未来任务,也就是feature。 当然每个人的理解是不同的,如果有误望请指出。 ### 响应式编程 百度百科上: ``` 响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。 ``` 说的非常笼统,这意味着什么呢?意味着这东西还没有具体化,概念还未具体化,没有实现其普遍性的价值。涉及到数据流的问题,在此就不好解释,后续慢慢展开。 ### 总结 那么一个程序是如何运用这四种模式呢? 1.多线程: ![](https://img2020.cnblogs.com/blog/1289794/202004/1289794-20200402172236627-1371103737.png) 2.并行处理 ![](https://img2020.cnblogs.com/blog/1289794/202004/1289794-20200402172805605-352249270.png) 3.异步编程 ![](https://img2020.cnblogs.com/blog/1289794/202004/1289794-20200402174516574-122980895.png) 4.响应式编程 数据驱动。

加载全部内容

相关教程
猜你喜欢
用户评论