并发编程语言有哪些

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

相关推荐

  • 企业费用管理平台大盘点:10款优选

    本文介绍了以下工具:合思、明道云、SAP Concur、管家婆、Spendesk、用友U8、Yokoy、金蝶K/3、Zoho Expense、AIrbase。 许多企业在繁琐的报销流程中消耗了大量人力和时间,效率低下,数据不准确,财务人员和员工都苦不堪言。本文整理了2024年最值得推荐的10款费用…

    2024年7月21日
    100
  • 差旅报销平台推荐:9款专业工具

    本文将介绍9款差旅报销平台:合思、Expensify、用友U8、TravelPerk、SAP Concur、金蝶K/3、Navan、管家婆、Happay。 差旅报销一直是企业管理中的一个大难题。繁琐的流程、复杂的审批、频繁的错误和时间浪费,这些都让财务和员工头疼不已。本文将介绍2024年最靠谱的9款…

    2024年7月21日
    000
  •  10款主流报销系统推荐:企业选型必看指南

    本文将介绍10款国内外报销系统:合思、Concur、用友U8、明道云、Zoho Expense、Expensify、Spendesk、NetSuite、Emburse Chrome River、AIrbase。 在选择报销系统时,很多企业常常面临一个棘手的问题:市场上有太多选择,如何才能找到最适合自…

    2024年7月20日
    200
  • 企业必备的9款财务报销管理软件

    本文将介绍9款财务报销系统:合思、Concur、用友U8、金蝶云星空、明道云、管家婆、Zoho Expense、简道云、Spendesk。

    2024年7月20日
    000
  • 企业工时记录软件的10大选择

    国内外主流的10款工时计算软件对比:PingCode、Worktile、Tita、易企秀、奇鱼、Teambition、Timely、Toggl Track、RescueTime、ClickUp。 在忙碌的工作中,记录和管理工时常常是令人头疼的问题。工时记录软件的选择不仅能帮你省时省力,还能大幅提高团…

    2024年7月19日
    800

发表回复

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

400-800-1024

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

分享本页
返回顶部