乱七八糟Nodejs系列二:线程模型
上一篇中说了这样一句话: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系列二:线程模型的更多相关文章
- 死磕 java线程系列之线程模型
问题 (1)线程类型有哪些? (2)线程模型有哪些? (3)各语言使用的是哪种线程模型? 简介 在Java中,我们平时所说的并发编程.多线程.共享资源等概念都是与线程相关的,这里所说的线程实际上应该叫 ...
- WPF QuickStart系列之线程模型(Thread Model)
这篇博客将介绍WPF中的线程模型. 首先我们先来看一个例子,用来计算一定范围内的素数个数. XAML: <Grid> <Grid.RowDefinitions> <Row ...
- 乱七八糟 Nodejs 系列一:试水
看Nodejs比较舒服的人,个人认为主要是: 以前是后端,转成前端的人: 前端巨牛的人: 后端巨牛的人: 巨牛的人... 当然还有我这种,脑抽不止的人~~ 不过学习的过程中发现,如果不是上来就用exp ...
- NodeJs系列二:你好,世界
安装nodejs 什么是nodejs中的模块 hello,world
- java并发系列(二)-----线程之间的协作(wait、notify、join、CountDownLatch、CyclicBarrier)
在java中,线程之间的切换是由操作系统说了算的,操作系统会给每个线程分配一个时间片,在时间片到期之后,线程让出cpu资源,由其他线程一起抢夺,那么如果开发想自己去在一定程度上(因为没办法100%控制 ...
- posix 线程(一):线程模型、pthread 系列函数 和 简单多线程服务器端程序
posix 线程(一):线程模型.pthread 系列函数 和 简单多线程服务器端程序 一.线程有3种模型,分别是N:1用户线程模型,1:1核心线程模型和N:M混合线程模型,posix thread属 ...
- 线程模型、pthread 系列函数 和 简单多线程服务器端程序
一.线程有3种模型,分别是N:1用户线程模型,1:1核心线程模型和N:M混合线程模型,posix thread属于1:1模型. (一).N:1用户线程模型 “线程实现”建立在“进程控制”机制之上,由用 ...
- Java多线程系列--“JUC线程池”03之 线程池原理(二)
概要 在前面一章"Java多线程系列--“JUC线程池”02之 线程池原理(一)"中介绍了线程池的数据结构,本章会通过分析线程池的源码,对线程池进行说明.内容包括:线程池示例参考代 ...
- c# 多线程系列二 自定义线程执行器
看了第一篇文章,多线程系列,看到了在线程执行任务队列有了一定的了解~! 那么今天我来讲讲,怎么样构建通用的自定义线程概念! 线程执行任务,肯定要有目标,但是如果写死了,那么一个线程处理执行职能按照思路 ...
随机推荐
- EF 多线程插入 Insert into DbContext Multithreading
当通过task 插入多条数据时报错. DBcontext 不是线程安全的, 如果是WebAPI 为每个请求创建DbContext 部分解释: http://stackoverflow.com/ques ...
- chrome 打不开网页
右键单击Chrome在桌面的快捷方式,在在但中选择“属性”,在对话框的“目标”项目中追加:-no-sandbox 大家比较熟悉的解决方法有配置 Hosts 文件和使用FQ软件两种,配置 Hos ...
- Codeforces 235E Number Challenge
http://codeforces.com/contest/235/problem/E 远距离orz......rng_58 证明可以见这里(可能要FQ才能看到) 还是copy一下证明吧: 记 $$f ...
- 使用定制的ArrayAdapter制作ListView的Items(翻译)
Translated by:AcerWang 原文出自:customizing-android-listview-items-with-custom-arrayadapter 背景介绍 对于现 ...
- HDOJ(HDU) 1465 不容易系列之一(错排)
Problem Description 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了! 做好"一件"事情尚且不易,若想永远成功而总从不失败,那更是难上加难了,就 ...
- 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 ...
- USACO6.5-Closed Fences:计算几何
Closed Fences A closed fence in the plane is a set of non-crossing, connected line segments with N c ...
- Oracle_Q&A_04
2014-12-19作业 [JSU]LJDragon's Oracle course tasks In the first semester, junior year --1.在管理员权限下创建一个新 ...
- Engineer Economic
1.选择题 10.下列哪项不属于总成本费用() A.生产成本 B.机会成本 C.管理费用 D.财务费用 第1章 11.下列哪项关于自有资金的表述是错误的(D) A.自有资金包括资本金 ...
- cocoapods 的使用心得
一般我们下载的demo里边含有cocoapods 我们需要 在终端上输入命令,让他能够成功运行 步骤如下: 打开终端 cd 项目目录 直接拖动到终端里边就可以, 然后 pod install 如果 ...