We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
程序:由源代码生成的可执行应用。 (例如:QQ.app)
进程:一个正在运行的程序可以看做一个进程,(例如:正在运行的QQ警示),进程拥有独立运行所需要的全部资源
线程:程序中独立运行的代码段。(例如:接收QQ消息的代码)
一个进程是由一或多个线程组成,进程只负责资源的调度和分配,线程才是程序真正的执行单元,负责代码的执行。
每个正在运行的程序(即进程),至少包括一个线程,这个线程叫主线程
主线程在程序启动时被创建,用于执行main函数
只有一个主线程的程序,称作单线程程序
主线程负责执行程序的所有代码(UI展现以及刷新,网络请求,本地存储等等)。这些代码只能顺序执行,无法并发执行
拥有多个线程的程序,称作多线程程序。
iOS允许用户自己开辟新的线程,相对于主线程来讲,这些线程,称为子线程
可以根据需要开辟若干子线程
子线程和主线程都是独立的运行单元,各自的执行互不影响,因此能够并发执行
单线程程序:只有一个线程,代码顺序执行,容易出现代码阻塞(页面假死)
多线程程序:有多个线程,线程间独立运行,能有效地避免代码阻塞,并且提高程序的运行性能
注意:iOS中关于UI的添加和刷新必须在主线程中操作
详见JS中的异步以及事件轮询机制 事件驱动 单线程 事件轮询 异步I/O 非阻塞:事件循环的一个好处就是让JS从来不阻塞,我们一般通过事件和回调去操作,所以当应用在等待一个IndexedDB查询返回或者一个XHR请求返回的时候,主线程仍然可以处理其他事情比如用户输入。 无论何时某个函数一旦开始运行,那么它就不可能被别的代码打断运行。
异步运行机制: (1)所有同步任务都在主线程上执行,形成一个执行栈(execution context stack)。 (2)主线程之外,还存在一个"任务队列"(task queue)。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。 (3)一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。 (4)主线程不断重复上面的第三步。
onclick 由浏览器内核的 DOM Binding 模块来处理,当事件触发的时候,回调函数会立即添加到任务队列中。
setTimeout 会由浏览器内核的 timer 模块来进行延时处理,当时间到达的时候,才会将回调函数添加到任务队列中。
ajax 则会由浏览器内核的 network 模块来处理,在网络请求完成返回之后,才将回调添加到任务队列中。
基于被调用者的**消息通信机制 **。
主进程等待调用结果(消息,返回值)时的状态。
异步是配合非阻塞使用的,这样才能发挥异步的效用。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
单线程
程序、进程、线程
程序:由源代码生成的可执行应用。 (例如:QQ.app)
进程:一个正在运行的程序可以看做一个进程,(例如:正在运行的QQ警示),进程拥有独立运行所需要的全部资源
线程:程序中独立运行的代码段。(例如:接收QQ消息的代码)
一个进程是由一或多个线程组成,进程只负责资源的调度和分配,线程才是程序真正的执行单元,负责代码的执行。
单线程
每个正在运行的程序(即进程),至少包括一个线程,这个线程叫主线程
主线程在程序启动时被创建,用于执行main函数
只有一个主线程的程序,称作单线程程序
主线程负责执行程序的所有代码(UI展现以及刷新,网络请求,本地存储等等)。这些代码只能顺序执行,无法并发执行
多线程
拥有多个线程的程序,称作多线程程序。
iOS允许用户自己开辟新的线程,相对于主线程来讲,这些线程,称为子线程
可以根据需要开辟若干子线程
子线程和主线程都是独立的运行单元,各自的执行互不影响,因此能够并发执行
单线程、多线程的区别
单线程程序:只有一个线程,代码顺序执行,容易出现代码阻塞(页面假死)
多线程程序:有多个线程,线程间独立运行,能有效地避免代码阻塞,并且提高程序的运行性能
注意:iOS中关于UI的添加和刷新必须在主线程中操作
事件轮询Event Loop
详见JS中的异步以及事件轮询机制
事件驱动
单线程
事件轮询
异步I/O
非阻塞:事件循环的一个好处就是让JS从来不阻塞,我们一般通过事件和回调去操作,所以当应用在等待一个IndexedDB查询返回或者一个XHR请求返回的时候,主线程仍然可以处理其他事情比如用户输入。
无论何时某个函数一旦开始运行,那么它就不可能被别的代码打断运行。
异步运行机制:
(1)所有同步任务都在主线程上执行,形成一个执行栈(execution context stack)。
(2)主线程之外,还存在一个"任务队列"(task queue)。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。
(3)一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。
(4)主线程不断重复上面的第三步。
onclick 由浏览器内核的 DOM Binding 模块来处理,当事件触发的时候,回调函数会立即添加到任务队列中。
setTimeout 会由浏览器内核的 timer 模块来进行延时处理,当时间到达的时候,才会将回调函数添加到任务队列中。
ajax 则会由浏览器内核的 network 模块来处理,在网络请求完成返回之后,才将回调添加到任务队列中。
异步同步与阻塞非阻塞
异步同步
基于被调用者的**消息通信机制 **。
阻塞非阻塞
主进程等待调用结果(消息,返回值)时的状态。
异步是配合非阻塞使用的,这样才能发挥异步的效用。
参考资料
The text was updated successfully, but these errors were encountered: