上一篇中说了这样一句话:Nodejs和浏览器javascript一样,都是单线程,所以和传统的不一样,这个后面有机会再说。挖了坑就得填,哎。

1.一个例子

来看一个例子,这个例子来自async javascript

   1:  function f()
   2:  {
   3:      var start = new Date();
   4:      setTimeout(function(){
   5:          var during = new Date() -start;
   6:          console.log(during);
   7:      },0)
   8:                              
   9:      while(new Date() - start<1000 ){}
  10:  }
  11:  f();

问第6行中,during 会是多少?

答案是 不少于1000

这就和javascript的线程模型有关(不考虑html5的 Web Workers)

简单地说,javascript是单线程,所以执行f()的时候,setTimeout只是在事件队列中(以下简称queue)注册一个事件。f将一直运行,直到结束,然后解释器会在事件队列中找一个满足执行条件的函数(假设叫f2)执行,然后一直等到f2运行完,再到queue中去找可以运行的函数。

所以,上面的 f 函数执行完了,解释器才会去看有没有可以执行函数,虽然触发时间是0,但是执行时,时间已经至少过去1000 ms了。

还是建议大家去看看《async JavaScript》,特别是第一章。而且,这书已经有中文版了。

最后来一道面试题吧

function f()
{
setTimeout(function(){
console.log("fuck");
},0) while(true ){}
}
f();

问,控制台什么时候输出fuck。

这个就不难作答了:fuck这词是和谐词汇,控制台会屏蔽的~~

2.Nodejs

Nodejs是单线程异步执行模型,这是JavaScript这门语言的特点是一致的。

Node不适合做计算密集的程序,适合做IO密集的程序,而web服务器大多是IO密集型的。

异步方式,会一定程度打乱写程序的思路。不过已经有不少开源的库可以让我们写比较舒服的异步程序,也就是比较舒服。。

不过单线程也就意味着Node本身没有同步问题,这直接kill一个大问题。

另外对于Nodejs 在多核架构的应用,我不是很懂,因为我也是刚学习Nodejs。不过已经有一些讨论和项目了,大家可以看一下

一篇访谈

一个开源项目

乱七八糟Nodejs系列二:线程模型的更多相关文章

  1. 死磕 java线程系列之线程模型

    问题 (1)线程类型有哪些? (2)线程模型有哪些? (3)各语言使用的是哪种线程模型? 简介 在Java中,我们平时所说的并发编程.多线程.共享资源等概念都是与线程相关的,这里所说的线程实际上应该叫 ...

  2. WPF QuickStart系列之线程模型(Thread Model)

    这篇博客将介绍WPF中的线程模型. 首先我们先来看一个例子,用来计算一定范围内的素数个数. XAML: <Grid> <Grid.RowDefinitions> <Row ...

  3. 乱七八糟 Nodejs 系列一:试水

    看Nodejs比较舒服的人,个人认为主要是: 以前是后端,转成前端的人: 前端巨牛的人: 后端巨牛的人: 巨牛的人... 当然还有我这种,脑抽不止的人~~ 不过学习的过程中发现,如果不是上来就用exp ...

  4. NodeJs系列二:你好,世界

    安装nodejs 什么是nodejs中的模块 hello,world

  5. java并发系列(二)-----线程之间的协作(wait、notify、join、CountDownLatch、CyclicBarrier)

    在java中,线程之间的切换是由操作系统说了算的,操作系统会给每个线程分配一个时间片,在时间片到期之后,线程让出cpu资源,由其他线程一起抢夺,那么如果开发想自己去在一定程度上(因为没办法100%控制 ...

  6. posix 线程(一):线程模型、pthread 系列函数 和 简单多线程服务器端程序

    posix 线程(一):线程模型.pthread 系列函数 和 简单多线程服务器端程序 一.线程有3种模型,分别是N:1用户线程模型,1:1核心线程模型和N:M混合线程模型,posix thread属 ...

  7. 线程模型、pthread 系列函数 和 简单多线程服务器端程序

    一.线程有3种模型,分别是N:1用户线程模型,1:1核心线程模型和N:M混合线程模型,posix thread属于1:1模型. (一).N:1用户线程模型 “线程实现”建立在“进程控制”机制之上,由用 ...

  8. Java多线程系列--“JUC线程池”03之 线程池原理(二)

    概要 在前面一章"Java多线程系列--“JUC线程池”02之 线程池原理(一)"中介绍了线程池的数据结构,本章会通过分析线程池的源码,对线程池进行说明.内容包括:线程池示例参考代 ...

  9. c# 多线程系列二 自定义线程执行器

    看了第一篇文章,多线程系列,看到了在线程执行任务队列有了一定的了解~! 那么今天我来讲讲,怎么样构建通用的自定义线程概念! 线程执行任务,肯定要有目标,但是如果写死了,那么一个线程处理执行职能按照思路 ...

随机推荐

  1. EF 多线程插入 Insert into DbContext Multithreading

    当通过task 插入多条数据时报错. DBcontext 不是线程安全的, 如果是WebAPI 为每个请求创建DbContext 部分解释: http://stackoverflow.com/ques ...

  2. chrome 打不开网页

    右键单击Chrome在桌面的快捷方式,在在但中选择“属性”,在对话框的“目标”项目中追加:-no-sandbox     大家比较熟悉的解决方法有配置 Hosts 文件和使用FQ软件两种,配置 Hos ...

  3. Codeforces 235E Number Challenge

    http://codeforces.com/contest/235/problem/E 远距离orz......rng_58 证明可以见这里(可能要FQ才能看到) 还是copy一下证明吧: 记 $$f ...

  4. 使用定制的ArrayAdapter制作ListView的Items(翻译)

    Translated by:AcerWang    原文出自:customizing-android-listview-items-with-custom-arrayadapter  背景介绍 对于现 ...

  5. HDOJ(HDU) 1465 不容易系列之一(错排)

    Problem Description 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了! 做好"一件"事情尚且不易,若想永远成功而总从不失败,那更是难上加难了,就 ...

  6. Codeforces Round #299 (Div. 1)C. Tavas and Pashmaks (凸壳)

    C. Tavas and Pashmaks   Tavas is a cheerleader in the new sports competition named "Pashmaks&qu ...

  7. USACO6.5-Closed Fences:计算几何

    Closed Fences A closed fence in the plane is a set of non-crossing, connected line segments with N c ...

  8. Oracle_Q&A_04

    2014-12-19作业 [JSU]LJDragon's Oracle course tasks In the first semester, junior year --1.在管理员权限下创建一个新 ...

  9. Engineer Economic

    1.选择题 10.下列哪项不属于总成本费用() A.生产成本    B.机会成本    C.管理费用    D.财务费用 第1章 11.下列哪项关于自有资金的表述是错误的(D) A.自有资金包括资本金 ...

  10. cocoapods 的使用心得

    一般我们下载的demo里边含有cocoapods 我们需要 在终端上输入命令,让他能够成功运行 步骤如下: 打开终端  cd 项目目录  直接拖动到终端里边就可以, 然后 pod install 如果 ...