并发和并行随着云计算的兴起,现在是一个热门的研究领域, 回顾一下问题的产生,当服务器需要处理大量连接时:
1、最简单的办法是,一个连接来了之后, fork一个线程去处理,当然,也可以用进程, 如php, 但大部分都是以线程的方式去处理, 这种方式的缺点是:现代操作系统中的线程开销尽管比进程小很多, 但所占的资源仍然很大, 需要保存上下文的运行环境, 当前的指针需要保存在堆栈中, 而且来回切换时,线程的资源都处在不释放状态, 所以一台机器最多跑5k左右的线程, 实际上线程数目超过1k, 可靠性和性能会大大降低,并且存在c10k的问题
2、采用事件驱动的办法, 当一个事件来了之后, 将处理逻辑委派给一个或者多个线程去处理,当前线程立刻进入下一个请求的处理,当handler进程的工作完成之后, 会执行一段callback逻辑做善后工作, 这段callback逻辑是事先准备好的, 这种方式是目前最流行的处理方式, 利用几个线程线程(包括请求处理进程、队列线程、handler线程等)完成高并发的需求,但这种方式的缺点是处理时延比较高, 无法充分利用CPU资源, 而占用了很大的内存资源:拿空间换时间
3、Actor模型
当一个请求来了之后, 则委派给一个Actor处理, 和事件驱动的区别是, 这些Actor之间不共享任何资源, 可进行并行处理, 事件驱动模型和Actor模型很容易被搞混淆, 如果事件驱动模型来一个请求则委派一个线程去处理并且这些线程之间不共享资源,不会出现锁的问题, 则可以认为这种事件驱动模型等价于Actor模型, Scala的Actor模型就是这么处理的, Actor会被代理到线程处理, 海量的Actor会被代理到一个JVM线程池处理,这样提升了很大的效率,而这种映射是scala帮你做好了; 而Erlang中Actor模型则更加彻底, 其实是OTP实现了操作系统中的线程的功能, 这些“线程”叫做process, 只不过这些process占用的资源很少, 也不共享任何资源, 这样每个actor可以跟process一一对应
总结一下:
第一种模型可以应对的并发数,最多几千的级别
第二种模型的并发数在几万的级别,不过根据机器性能,也可以往上提升到10w
第三种模型对应的并发数在几百万的级别,如Erlang和akka
相关推荐
在实际应用中,可以将并发和并行结合使用,以提高系统的性能和响应速度。例如,可以使用并发来管理多个请求的同时处理,然后在每个请求内部使用并行来加速计算任务。 ———————————————— 版权声明:...
什么是并发、并行
NULL 博文链接:https://duhuilin01.iteye.com/blog/526157
go语言并发并行机制大揭秘,这本书里详细的讲解了关于go语言的并发和并行机制。值得一看。
15个Python的并发和并行编程的代码示例集合
30 python算法代码示例(并发和并行算法 YOLO算法).docx
软件工程中的并发与并行编程.pptx
软件工程中的并发与并行计算.pptx
并发不是并行,它更好!.现代社会是并行的:多核、网络、云计算、用户负载,并发技术对此有用。Go语言支持并发,它提供了:并发执行(goroutines),同步和消息(channels)和多路并发控制(select)。 现代社会是并行的...
软件工程中的并发与并行编程1.pptx
软件工程中的并发与并行计算1.pptx
并行计算-并发构造纵览并行计算-并发构造纵览并行计算-并发构造纵览
数据库思维导图——并发控制 并发控制 多事务执行方式 (1)事务串行执行 每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行 不能充分利用系统资源,发挥数据库共享资源的特点 (2)交叉并发方式...
本文主要给大家介绍了关于ruby并发并行和全局锁的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 并发和并行 在开发时,我们经常会接触到两个概念: 并发和并行,几乎所有谈到并发和...
(2)并发性分析:最外层顺序执行,内层的两个循环实现并发。 (3)线程处理:生成n个线程,2000个数据。n-2个线程分配给当前始终点最短路径的计算,其中(n-2)/2个线程求最近顶点,(n-2)/2个线程更新最短路径数组。...
但在这当中,发现一些概念区分起来很难,比如并发和并行,同步和异步,阻塞和非阻塞,但是这些概念却很重要。因此在此把它总结下来。并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间...
◆讲解命令式数据并行、命令式任务并行、并发集合以及协调数据结构。 ◆描述PLINQ高级声明式数据并行。 ◆讨论如何使用新的Visual Studio 2010并行调试功能来调试匿名方法、任务和线程。 ◆演示如何对数据源进行分区...