并发编程语言有哪些

并发编程语言有: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

相关推荐

  • Scrum团队成员的个人发展策略是什么

    在探讨Scrum团队成员的个人发展策略,1、持续教育和培训、2、专业认证、3、参与Scrum日常实践、4、团队互助和反馈、5、目标设定和自我评估、6、寻找导师或担任导师。成员通过参与持续教育,不断学习新的技术和敏捷实践。专业认证如CSM和PSM提升其专业性。日常参与Scrum活动有助于实操能力提升。…

    2023年12月12日
    20000
  • 为什么Object.entries和Array.prototype.entries的返回值类型不同

    原因主要是:由于 Object 和 Array 这两个数据类型的属性和方法的不同,它们的返回值类型却不同。Object.entries 返回的是一个由属性名和属性值组成的字符串数组,而 Array.prototype.entries 返回的是一个由索引和值组成的数字数组。 Object.entrie…

    2023年2月28日
    29500
  • 工程部如何管理项目

    工程项目管理是指在整个工程项目的规划、设计、采购、施工与交付过程中,利用专业知识和技能,以及相关的工具和技术,来确保项目按预定范围、时间、成本和质量标准完成。1、建立项目管理团队;2、明确项目目标和范围;3、制定详细的项目计划;4、资源的合理配置与管理;5、不断监控和控制项目进度;6、坚持有效的沟通…

    2024年1月8日
    20000
  • 有什么app软件可以制定每天的计划

    制定每天的计划app软件有:1、Todoist;2、Trello;3、Any.do;4、Google 日历;5、Focus To-Do;6、Wunderlist。Todoist能够帮助用户进行任务的分类、排序、设定截止日期、添加备注等。 在如今快节奏的生活中,人们越来越需要一些工具来帮助他们合理安排…

    2023年3月3日
    2.7K00
  • olap与oltp的区别是什么

    olap与oltp的区别在于以下几个方面:1、基本含义不同;2、实时性要求不同;3、数据量不同;4、用户和系统的面向性不同;5、数据库设计不同。基本含义不同是指,OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理。 一、基本含义不同 OLTP是传统的关系型数据库的主要应用,主要是基…

    2023年2月20日
    2.3K00
  • 企业微信和办公OA的区别

    区别有:一、定位不同;二、功能不同;三、安全性不同;四、使用场景不同。企业微信是一款专注于企业内部沟通和协作的工具,而办公OA则是一个更加综合的办公平台,除了内部沟通和协作外还包括日常办公和管理等多个功能模块。 一、定位不同 企业微信是一款专注于企业内部沟通和协作的工具,而办公OA则是一个更加综合的…

    2023年5月28日
    1.7K00
  • devops为什么这么难落地

    开门见山地指出,DevOps之所以难以落地涉及三个核心原因:1、文化转型挑战、2、工具及流程整合难度、3、技能与知识缺乏。在这之中,文化转型挑战显得尤为棘手,因为它要求企业从内到外进行根本性的变化。这不仅包括引入新的技术和流程,更重要的是改变人们的工作方式、思维模式以及如何协同合作。实现文化转换需要…

    2024年3月26日
    1300
  • 目前市场上主流的语音平台有哪些

    目前市场上主流的语音平台有:1、MOMO陌陌;2、有信;3、连信;4、爱聊;5、蜜糖视频聊天交友;6、哩咔语音;7、Hiya语音等。MOMO陌陌为用户提供了丰富的社交版块,同城功能可以与距离最近的人打招呼,点点匹配模式也是一大特色。 一、MOMO陌陌 本款app为用户提供了丰富的社交版块,同城功能可…

    2023年5月10日
    1.9K00
  • svn是什么工具

    SVN(Subversion),是一个开放源代码的版本控制系统,也就是说 Subversion 管理着随时间改变的数据,是在多个人员、设备之间,同步不同版本的文档和源代码的工具。简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。

    2022年12月27日
    9.2K00
  • 办公室oa系统是什么

    办公自动化系统(Office Automation System, OA)是利用计算机软硬件和网络技术,对日常办公活动如信息处理、传递及办公资源管理等进行有效的自动化。这些系统提升工作效率、简化流程、优化通信路径。重点特性包括文档管理、流程审批、通讯录服务以及会议管理。文档管理功能是OA系统的核心组…

    2024年1月11日
    36000

发表回复

登录后才能评论
站长微信
站长微信
电话联系

400-800-1024

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

分享本页
返回顶部