美文网首页
并行线程(看着挺有意思的 你要不要来)

并行线程(看着挺有意思的 你要不要来)

作者: Eirmood | 来源:发表于2020-08-22 10:37 被阅读0次

异步是关于现在和将来的时间间隙,而并行是关于能够同时发生的事情。
并行计算最常见的工具就是进程和线程。进程和线程独立运行,并可能同时运行:在不同的处理器,甚至不同的计算机上,但多个线程能够共享单个进程的内存。
与之相对的是,事件循环把自身的工作分成一个个任务并顺序执行,不允许对共享内存的并行访问和修改。通过分立线程中彼此合作的事件循环,并行和顺序执行可以共存。

请看实例: 代码对你有点意思
线程1(X和Y是临时内存地址): foo()
线程2(X和Y是临时内存地址): bar

假设两个线程并行执行。它们在临时步骤中使用了共享的内存地址X和Y。

按照不同的步骤执行,最终结果不一样,请看下面:

虽然JavaScript从不跨线程共享数据,但是这一层次的不确定性还是存在。所以JavaScript并不总是确定性的。

下面来看下完整运行吧~
由于JavaScript的单线程特性,foo()(以及bar())中的代码具有原子性。也就是说,一旦foo()开始运行,它的所有代码都会在bar()中的任意代码运行之前完成,或者相反。这称为完整运行(run-to-completion)特性。

示例

由于foo()不会被bar()中断,bar()也不会被foo()中断,所以这个程序只有两个可能的输出,取决于这两个函数哪个先运行——如果存在多线程,且foo()和bar()中的语句可以交替运行的话,可能输出的数目将会增加不少!
块1是同步的(现在运行),而块2和块3是异步的(将来运行)


块1
块2
块3

块2和块3哪个先运行都有可能,所以这个程序有两个可能输出。


输出1
输出2
同一段代码有两个可能输出意味着JavaScript还是存在不确定性!
在JavaScript的特性中,这种函数顺序的不确定性就是通常所说的竞态条件(race condition)。
foo()和bar()相互竞争,看谁先运行。具体来说,因为无法可靠预测a和b的最终结果,所以才是竞态条件。
如果JavaScript中的某个函数由于某种原因不具有完整运行特性,那么可能的结果就会多得多

相关文章

  • 并行线程(看着挺有意思的 你要不要来)

    异步是关于现在和将来的时间间隙,而并行是关于能够同时发生的事情。并行计算最常见的工具就是进程和线程。进程和线程独立...

  • iOS多线程小结

    同步异步串行并行 同步串行:不开启线程 同步并行:不开启线程 异步串行:最多开启一个线程 异步并行:开启线程 同步...

  • iOS面试题合集(多线程篇)

    目录: 1.进程与线程分别是什么意思? 2.什么是多线程? 3.多线程的优点和缺点有哪些? 4.多线程的 并行 和...

  • 垃圾收集器优缺点总结

    Parallel并行: 多条垃圾收集线程并行工作, 此时用户线程仍处于等待状态Concurrent并发: 用户线程...

  • 垃圾收集器

    1 并发和并行的垃圾收集器 并行多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。 并发用户线程与垃圾收集...

  • 常用的GCD记录一下

    子线程并行 串行 主线程 串行队列 子线程 并行队列 子线程 栅栏函数 控制执行顺序 避免数据竞争 多线...

  • JVM垃圾回收算法与收集器

    相关概念 并行与并发 并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。 并发...

  • 多线程、线程池

    参考文章:Java中的多线程你只要看这一篇就够了 - Givefine - 博客园 线程的并行和并发 并行:多个c...

  • iOS - 同步异步、串行并行

    同步、异步:表示开辟新线程的能力。串行、并行:表示队列的调度任务的能力。 任务:就是执行操作的意思,换句话说就是你...

  • iOS 多线程技术总结

    概览 进程与线程的概念 多线程的由来 并行与并发 多线程的实现 串行与并行 线程的几种状态 串行队列与并发队列区别...

网友评论

      本文标题:并行线程(看着挺有意思的 你要不要来)

      本文链接:https://www.haomeiwen.com/subject/glhbrktx.html