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

前言

初学并发的时候一想到并发,然后就和多线程对等了。这就有一丢丢狭隘了,比如说node是单线程,但是人家可以高并发。说明并发并不是一个简单的多线程问题。

同样很多人说硬件cpu的发展为并发提供基础,在这里也可以看出是其实是为多线程提供基础,为并发提供发展道路。

并发的优点在操作系统单核的时候就体现了,最好的体现就是操作系统中线程的调度。而我们能做哪种并发,取决于操作系统能做哪种并发,没有人会以为自己写的程序真的能创建线程。

下面是个人的一些使用过得并发路子,由于接触有限只是用下面4种。

正文

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.多线程:

2.并行处理

3.异步编程

4.响应式编程

数据驱动。

posted @ 2020-04-02 17:50  敖毛毛  阅读(363)  评论(0编辑  收藏  举报