并发和并行随着云计算的兴起,现在是一个热门的研究领域, 回顾一下问题的产生,当服务器需要处理大量连接时:
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
相关推荐
在IT领域,"并发与并行"是两个重要的概念,特别是在多核处理器和分布式系统中。它们涉及到如何高效地利用计算资源,以提高程序的执行效率。本文将深入探讨这两个概念,以及相关的工具和技术。 首先,我们要理解并发...
并发编程和并行计算是计算机科学中的两个重要概念,它们都是为了提高系统效率和资源利用率。在多任务处理和高性能计算领域,理解并发和并行的区别至关重要。 **并发(Concurrency)**: 并发主要关注的是任务的执行...
总的来说,Go语言在并发和并行编程方面提供了非常丰富的库和工具,这些工具的设计哲学是简洁、高效和易于理解。随着Go语言的广泛应用,其并发模型也成为了并发编程研究和实践的重要参考。对于希望深入理解并发编程,...
在Python编程中,并发和并行编程是提升程序性能的关键技术。这些技术允许程序同时执行多个任务,从而充分利用多核处理器的能力。以下是对给定文件中提供的五个不同代码示例的详细解释: 1. **多线程实现并发**: ...
什么是并发、并行
在软件工程中,为了充分利用硬件资源并提高程序的响应性和吞吐量,通常会采用并发和并行技术: - **线程同步与互斥**:为了保证多线程程序的安全性,必须采取适当的同步措施。常见的同步机制包括锁(mutex)、信号...
本资源提供了30个Python算法代码示例,涵盖了并发和并行算法、YOLO算法等多种领域。其中,YOLO算法是一种常用的目标检测算法,能够实时检测图像或视频中的目标对象。本资源提供了多个使用YOLO算法的Python代码示例,...
并发与并行是现代软件开发中非常重要的概念,它们能够显著提升系统的性能和响应能力。 - **并发**:指的是多个任务在同一时间段内被执行,但这些任务实际上是通过快速切换来实现的,即它们不是真正的同时执行。 - *...
- **快速完成任务**:通过并发和并行技术,可以显著减少完成大型任务所需的时间。 - **提高计算速度**:并行处理可以充分利用多核处理器的能力,显著提升计算速度。 - **更有效地利用硬件资源**:合理分配任务可以...
软件工程中的并发与并行计算1.pptx
每个线程都有自己的调用堆栈和执行上下文,使得多个任务可以并行运行,提高系统资源利用率。 三、线程同步与互斥 在多线程环境中,线程同步是保证数据一致性的重要手段。C#提供了多种同步机制,如锁(Lock)、...
并发可以分为两种主要类型:时间片轮转并发和真正并行。时间片轮转并发在单个处理器上模拟多任务,通过快速切换执行上下文来实现;而真正并行则利用多个处理器或核心同时执行不同的任务。在并行计算中,我们需要理解...
在软件工程领域,**并发控制**与**并行处理**是两个极为关键的概念,它们对于提升系统的性能、效率和用户体验有着重要作用。 ##### 并发控制与并行处理的优势 - **提高系统性能**:通过同时执行多个操作来加快程序...
6. **Join-calculus(Join演算)**:Join-calculus是一种用于表达并发和并行行为的形式化模型。 7. **Functional Programming(函数式编程)**:函数式编程强调无副作用的纯函数调用,有助于简化并发编程。 #### 四...
在.NET框架中,为了支持并行编程,引入了任务并行库(TPL)和并行LINQ(PLINQ)等高级抽象。 任务并行库(TPL)提供了多个并行编程的模型,它包括了用于处理任务并行的System.Threading.Tasks命名空间下的Task类,...
它采用多版本并发控制(MVCC)机制,允许读取操作和写入操作并行进行,而不会相互阻塞。在Oracle中,当一个用户更新数据时,其他用户可以读取数据的旧版本,这被称为快照隔离。这种机制使得查询操作不会因为更新操作...