• 请不要在回答技术问题时复制粘贴 AI 生成的内容
phx13ye
V2EX  ›  程序员

有哪些语言特性或者说编程方式更利于多核并行?

  •  
  •   phx13ye ·
    Alwayswithme · May 12, 2015 · 6494 views
    This topic created in 4192 days ago, the information mentioned may be changed or developed.
    现在的CPU核心堆的越来越多, 跑分也越来越强, 但是总感觉程序使用体验没有提升.

    举例来说: 我现在用的爪机是联发科的八核6752, 大部分程序的体验还是和以前手机差不多(忘了是高通的什么了, 好像是胶水双核的). 可能比较明显的就是解压缩,安装APP快了

    电脑玩游戏, 帧数提升也是换显卡比换CPU大, 当然这里瓶颈也主要是IO和渲染.

    所谓的多核优化, 到底是什么决定的?
    35 replies  •  2015-05-15 11:55:13 +08:00
    northisland
    northisland
    May 12, 2015
    1
    for循环并行处理
    lucifer4he
    lucifer4he
    May 12, 2015
    2
    openCL
    xbaofeng
    xbaofeng
    May 12, 2015
    3
    golang
    antspeed
    antspeed
    May 12, 2015
    4
    golang

    或者一些语言都有并行库
    MrJing1992
    MrJing1992
    May 12, 2015
    5
    golang、rust
    phx13ye
    phx13ye
    OP
    May 12, 2015
    6
    @楼上各位
    如果不局限于语言,有比较通用的?
    我自己的理解, 多线程, fork-join, mapreduce等算不算?
    likuku
    likuku
    May 12, 2015
    7
    erlang, golang
    askfermi
    askfermi
    May 12, 2015
    8
    openmp...
    spacewander
    spacewander
    May 12, 2015 via Android
    9
    更少的共享变量和更少的状态
    wy315700
    wy315700
    May 12, 2015
    10
    CPU的性能由核心数和单核运算性能决定,
    yakczh
    yakczh
    May 12, 2015
    11
    php /java
    yakczh
    yakczh
    May 12, 2015
    12
    ruby/python都有GIL
    clino
    clino
    May 12, 2015
    13
    多进程也可以嘛
    w359405949
    w359405949
    May 12, 2015
    14
    CPU:线程,进程,OPENMP。

    CPU+GPU:OPENCL,CUDA。
    endrollex
    endrollex
    May 12, 2015
    15
    我觉得有三种情况,
    1手动写多线程
    2用轻量级语法分配多线程,编译器并行优化
    3单线程的某些语句自动优化成多线程
    4函数式?这个不了解
    CRVV
    CRVV
    May 12, 2015
    16
    胶水双核...
    一个莫名其妙的词,应该是当年什么人瞎写的一篇文章搞出来的
    居然现在还有人在用
    wy315700
    wy315700
    May 12, 2015
    17
    @CRVV 最早是intel,把两个核心粘在一个板子上 奔腾D双核就这么来的。

    后来 Intel的四核也是 把两个双核黏在一起
    loolac
    loolac
    May 12, 2015
    18
    erlang
    Robling
    Robling
    May 12, 2015
    19
    openmp
    E2gCaBAT5I87sw1M
    E2gCaBAT5I87sw1M
    May 12, 2015
    20
    二郎
    robertlyc
    robertlyc
    May 12, 2015
    21
    erlang/elixir
    CRVV
    CRVV
    May 12, 2015
    22
    @wy315700
    什么叫黏在一起?那不是黏在一起的设计是怎么样的?
    这就是多核处理器的不同设计方案嘛,为啥要用个“黏”?
    我只是想说这个词编得莫名其妙,让我感觉完全是用来诋毁的
    baozijun
    baozijun
    May 12, 2015
    23
    Akka
    wy315700
    wy315700
    May 12, 2015
    24
    @CRVV 就是说

    一个板子上放了两个单核CPU,这个板子不是指芯片,而是PCB板子。

    两个核心之间通过北桥芯片通讯

    逻辑上这个是两个CPU,而不是双核CPU
    holulu
    holulu
    May 12, 2015❤️1
    25
    多核优化只能说是一种程序运作方式,由程序本身决定的。无论使用什么语言都可以写出使用单核或多核的程序,最终怎么跑还是得看程序开发者怎么写。

    现在好像也没有什么技术能够将单核程序自动使用多核来处理,毕竟这个和具体的程序逻辑有关,如果这个自动判断的方法出现问题,那程序的执行就混乱了。

    要利用多核,可以通过开多进程或多线程处理,这些都得程序开发者在程序中使用了相关的技术才能用上多核。而像协程和类似的轻量级进程或线程的并发机制也只是省去了开发者自行调度进程或线程的工夫,但程序设计上还是得真正利用上这些并发机制才能达到利用多核的效果。
    所以无论编程语言有多好的并发机制,如果程序本身没有用上,那程序的主要业务逻辑也只能跑在单核上。对于有 GC 和自动异步 IO 的语言来说(如 Golang),如果程序逻辑没有用上这些并发机制(如 Golang 的 goroutine),则程序的主要逻辑还是跑在单核上,或许其他的部分像 GC 和 IO 操作则会跑在其他核上,但这对于多核的利用是有限的。

    所以最后还得程序本身的逻辑决定了多核的利用。
    1ternal
    1ternal
    May 12, 2015
    26
    二郎
    phx13ye
    phx13ye
    OP
    May 12, 2015
    27
    @holulu 是的,所以我想知道怎么利用多核的优势
    jy01264313
    jy01264313
    May 12, 2015
    28
    scala
    holulu
    holulu
    May 12, 2015
    29
    @phx13ye 上面不是有很多方案了吗?具体怎么实现还是得看用什么语言了
    yyw
    yyw
    May 12, 2015
    30
    erlang 和 golang
    hepin1989
    hepin1989
    May 12, 2015
    31
    还和写软件的人有关
    davidlau
    davidlau
    May 12, 2015
    32
    函数式编程的特性:不可变量Immutable var,高阶函数、闭包,尽量少的状态变量, Map Reduce Filter

    函数式语言:Swift Scala Erlang Haskell LISP


    附上最近写的2篇博文:

    通过Swift学函数式编程
    http://davidlau.me/2015/05/11/learning-functional-programming-in-swift/

    笔记:软件开发的转折——并行化
    http://davidlau.me/2015/05/11/notes-on-The-Free-Launch-Is-Over/
    zwzmzd
    zwzmzd
    May 12, 2015 via Android
    33
    matlab这种矩阵运算

    还有map,reduce这种批量型的
    phx13ye
    phx13ye
    OP
    May 12, 2015❤️1
    34
    @davidlau 然而你的博客挂了
    davidlau
    davidlau
    May 15, 2015
    35
    @phx13ye 博客修好了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1346 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 76ms · UTC 21:57 · PVG 05:57 · LAX 13:57 · JFK 16:57
    ♥ Do have faith in what you're doing.