并发系列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.响应式编程
数据驱动。
相关文章
- 淘宝亿级高并发分布式架构演进之路
- Go语言并发之并发实现、多核CPU设置、多协程间的通信、select、多协程间的同步(二十一)
- 数据库系列:高并发下的数据字段变更
- php如何解决高并发
- 【Java 并发编程】线程共享变量可见性 ( volatile 关键字使用场景分析 | MESI 缓存一致性协议 | 总线嗅探机制 )
- 【浅尝高并发编程】接私活差点翻车
- 干货:Java并发编程系列之synchronized(一)详解编程语言
- Java 并发集合的实现原理详解编程语言
- 极致性能:谁在Linux高并发服务器上占据优势?(linux高并发服务器)
- 解决MySQL并发访问问题(mysql并发问题吗)
- 性能优化MySQL达到1万并发性能优化指南(mysql1万并发)
- SQL Server超强的并发性能剖析(sqlserver并发数)
- 能Redis读写操作的高吞吐量多并发性能研究(redis读写频繁并发性)