并发编程语言有哪些

并发编程语言有:1、单进程解释语言;2、共享内存的多线程语言;3、Erlang;4、Golang。单进程解释语言包括python, ruby, node.js等,这类解释语言通常提供极高的开发效率,和相对较差的执行效率,在多核与并发的世界,它们不提供任何支持。

并发编程语言有哪些-Worktile社区

1、单进程解释语言

单进程解释语言包括python, ruby, node.js等,这类解释语言通常提供极高的开发效率,和相对较差的执行效率,在多核与并发的世界,它们不提供任何支持。执行一段代码时,无法使用到第二个cpu内核。所以执行这类语言开发的服务,想要利用所有的cpu,只能依靠架构和部署。

在多核和集群的环境下,这类语言的部署是类似的,就是启动多个进程,各自独立地响应服务请求,来提升系统整体的并发吞吐能力,对外接口方面,需要硬件或者软件的负载均衡代理层。如果有进程内的可变缓存对象,开发时需要考虑数据同步。

2、共享内存的多线程语言

共享内存的多线程语言java, .net等,这类语言在设计之初都注重性能,具有较高的执行效率。在单核的年代,他们提供了创建操作系统线程的能力,可以在一个运行进程内,充分利用cpu的运算能力(当一个空闲线程等待时,其它的线程可以运行)。当多核cpu发明以后,那些支持多线程的软件,自动就具有了支持多核的能力。然而多核出现是在这类语言发明之后,真正的并发执行发生后,原先单核环境下不会发生的问题暴露出来,于是java和.net纷纷升级语言,提供补丁,以更好的支持多核并发的环境。

那么,并发执行暴露出来的是什么问题。通常是因为并发执行的进程访问了共享的内存,由于读写的次序不可预料,会产生不可预料的结果。怎么解决这个问题,java和.net提供的方法是加锁,就是到一个进程(线程)访问共享内存时,不允许其它进程(线程)访问。写加锁的代码对程序员的要求很高,一不小心就会发生死锁,而一旦发生死锁,排查错误非常困难。

在架构方面,在多核的单台服务器环境下,不需要运行多个进程也能提高吞吐能力,简化了部署。在集群环境下,和名列前茅类语言相同。

3、Erlang

Erlang诞生已经二三十年,设计之初,是为集群设计,提供了集群与单机一致的开发方法,从语言层面,消除了单机和集群的差异。用Erlang在单机开发的软件,可以轻松扩展运行在整个集群上。这是架构层面的简化。

Erlang是函数式语言,变量只能赋值一次,然后不可改变,同时,Erlang不允许进程间共享数据,从语言层面避免的并发编程最容易引起的错误。因为进程间不允许共享数据,所以Erlang也不需要加锁解锁的语句,我猜语言本身在底层实现用到了加锁原语,但程序员可以和繁复的锁告别,是足够幸福的。每个进程都可以安全的并发执行,但在进程内部,所有的操作都是串行的。往好处想,既享受到了多核和集群的好处,又避免了产生编程错误的可能,正是目前Erlang持续升温的原因。不足的地方是,不适合某些场景的应用,比如缓存服务,当我有一大块内存提供缓存服务时,只能有一个进程来读写这块内存,无法进一步提升服务性能。

4、Golang

在介绍Golang之前,先总结Erlang适应多核编程的特点:单个服务能利用到多核;进程间不共享内存;进程间用消息通讯,不用加锁机制;进程间可以跨服务器通讯。

之前我们说的名列前茅类语言比如python,不能做到名列前茅点。第二类语言java和.net,不能做到第三点,所有的语言都不能做到第四点(需要额外开发,不能在语言内部支持)。如果以Erlang的思想来写Golang的代码,可以做到1,2,3点。你大概能知道Golang是怎么回事了。

Go语言的特色是,很多事情你都“可以”做。可以进程间使用消息管道来替代锁,也可以使用锁。可以使用函数式编程,也可以使用面向对象开发。可以共享内存,当然开发人员可以选择不共享内存。可以方便创建多个进程来并发执行,也可以指定非常多的并发数目,限制cpu资源消耗。

参考Erlang的设计思想,我们开发Go语言应用时,可以做到“1”和“3”,便利地使用多核来提高性能,同时降低开发门槛。在我们《架构篇》中提到的场景,网页服务的场景可以做到“2”,进程间不共享内存;而缓存服务的场景,我们可以使用多进程来访问读取共享缓存,提高吞吐能力,而同时保证只存在一个进程,来修改共享缓存,避免写入冲突。

注意,这里有个边界状况,你需要留意,而我在这里忽略了。也就是写入操作完成一半时,可能被读取进程读到不完整的数据,在我这里的场景,并不太在乎。如果一定要保证读取数据一致,将不得不引入加锁机制,这是多么可怕。

延伸阅读:

Erlang语言的目标

Erlang是一种面向并发运行环境的通用编程语言。该语言由爱立信公司在1986年开始开发。设计之初,Erlang的开发者着眼于找到一种适用于开发大型电信交换设备的编程语言,即达到以下目标:

大规模并发处理与分布式计算能力

同时处理大量的并发业务(例如同时处理上百万个电话呼叫);必须及时并在特定短的时问内完成业务处理;适用于大规模的分布式处理系统,并不断与硬件进行交互;

用于开发高可靠性、高质量的电信产品

连续数年的不间断运行;对软件系统所进行的维护操作(如配置修改、升级等)不会中比软件本身的运行;在硬件故障和软件错误发生时具有容错能力,严格地限制故障和错误所波及的范围;

适用于复杂的项目

用于超大规模的软件开发项目(例如数百万行代码);所实现的软件能完成复杂的功能,各特性之问存在大量交互。

该语言随后在爱立信内部的若干电信设备开发项目中得到应用,并逐步完善;1988年底Erlang成为开源语言(开源对爱立信的直接好处是:Erlang语言本身的维护与发展、相关的教育培训等投入不再由爱立信独自承担;在开源社区的看护下可以使Erlang更好地发展,同时爱立信也可以继续享受该语言的成果),但并不广为人知;近年来随着基于互联网的电子商务、即时通讯、云计算、大型网络游戏等应用的发展,以及多核处理器的逐渐兴起,Erlang在大规模并发处理能力和高可靠性方面的优势被越来越多的人所重视,其应用范围有逐渐扩大之势。

文章标题:并发编程语言有哪些,发布者:小编,转载请注明出处:https://worktile.com/kb/p/35309

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小编的头像小编
上一篇 2023年1月11日 下午10:26
下一篇 2023年1月11日 下午10:29

相关推荐

  • 项目的什么不包含管理储备

    项目的成本计划、风险应对策略、进度计划以及范围描述是不包含管理储备的。在项目管理中,管理储备是为了应对项目中无法预见的风险而设立的一种预算,它不包含在项目的初步预算中,也不包含在项目的成本基准中。这是因为管理储备的使用需要得到高层管理人员的批准,因此,它并不属于项目经理可以自由支配的资源。在具体实施…

    2024年8月7日
    600
  • 项目管理目标 ci目标是什么

    在项目管理中,CI目标是指持续集成目标,这是一种软件开发实践,它要求团队频繁地将代码集成到一个共享的主线中。CI目标主要包括:减少集成问题、提高软件质量、加速软件发布。 持续集成通过自动化的构建和测试,可以发现并修复集成问题,从而避免了“集成地狱”的情况。这有利于提高团队的效率,减少重复的工作,帮助…

    2024年8月7日
    300
  • 文化项目运行管理是什么

    文化项目运行管理包括:项目规划、资源配置、进度控制、成本管理、风险管理。项目规划是文化项目运行管理中最为关键的一环。它不仅涉及到项目的总体目标、阶段性目标和具体任务的明确,还包括对项目时间表、资源分配及预算的详细安排。一个科学的项目规划可以有效地指导项目的实施,确保项目按计划进行,避免资源浪费和时间…

    2024年8月7日
    300
  • 新加坡项目管理模式是什么

    新加坡的项目管理模式是一种以结果为导向,注重团队协作的管理方式。这种模式的主要特点包括:以项目为中心,明确项目目标和预期成果;强调团队之间的沟通和协作,确保项目的顺利进行;关注风险管理,提前预防和解决可能出现的问题;重视质量管理,保证项目成果的质量和效益。其中,以项目为中心,明确项目目标和预期成果是…

    2024年8月7日
    400
  • 项目管理师需要学什么

    项目管理师需要掌握的知识和技能主要包括:项目管理理论、项目质量管理、项目风险管理、项目时间管理、项目成本管理、项目沟通管理、项目人力资源管理、项目采购管理、项目整合管理等。此外,还需要具备一定的领导力、沟通能力、决策能力、协调能力、解决问题的能力以及时间管理能力等。 接下来,我将详细介绍这些知识和技…

    2024年8月7日
    200

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部