在编程语言中,有的语言是多线程的,有的是单线程的,好比java就是多线程的,javascript是单线程的。 也就是说js就像一条流水线,只能在这仅仅一条流水线上干活,不能开辟多个线程;而Java能够经过类继承在开辟个进程。javascript
进程:一个项目运行就表示一个进程,进程是操做系统分配和调度资源的基本单位 进程之间是相互独立。html
好比浏览器打开多个选项卡,是典型多进程的项目 每个选项卡都是一个独立的进程 ,他们之间是相互不影响,一个进程关闭了,不会影响另外一个进程。java
线程:在一个进程中,包含若干个线程,真正干活的是线程,如工厂--->进程 工人--->线程编程
同步含义是“一块儿”,异步含义是“一边……一边……”浏览器
在编程思想里面理解为:bash
同步:代码的书写顺序和代码的执行顺序同样多线程
异步:代码的书写顺序和代码的执行顺序不同 例如:setTimeout() btn.onclick = function(){}异步
console.log("start")
// 先获取button按钮 document文档--->html文档
var btn = document.getElementById("btn") // = 赋值运算符
// 给按钮注册一个点击事件 btn叫事件源 click叫事件名 function(){} 函数 当事件发生时,作什么
// 异步代码
btn.onclick = function(){
alert("登陆成功了....")
}
console.log("end")
复制代码
同步、异步执行顺序:(任务一和任务三是同步任务,任务二是异步任务) 编程语言
总结:一种是同步任务,另外一种是异步任务。同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;异步任务指的是,不进入主线程、而进入"异步任务队列"的任务,只有等主线程任务执行完毕,"异步任务队列"开始通知主线程,请求执行任务,该任务才会进入主线程执行。函数
总结:同步、异步:只是对于热水壶。普通水壶表明同步;响水壶表明异步。虽然都能干活,但响水壶能够在本身完工以后,提示小杨水开了。
阻塞、非阻塞:仅仅表明小杨,立等的属于阻塞(1,3);干别的事了属于非阻塞(2,4)。
因此在上述同步阻塞、同步非阻塞、异步阻塞、异步非阻塞中,异步非阻塞状况下效率较高。
下面代码属于同步阻塞:
在while循环中一直是死循环,会一直执行循环,下面的任务不能执行,称为同步阻塞。
console.log(1) // 同步
// 死循环
while(true){ // 同步
console.log("....")
}
console.log(2) // 同步
复制代码
下面代码是异步非阻塞:
<script>
console.log("start")
// 先获取button按钮 document文档--->html文档
var btn = document.getElementById("btn") //
// 给按钮注册一个点击事件 btn叫事件源 click叫事件名
// 异步代码
btn.onclick = function(){
alert("登陆成功了....")
}
console.log("end")
// 说明:代码里面明明顺序是这样的,start,登陆成功了....,end
// 可是咱们在执行代码结果是这样的,start,end,当你点击了按钮,那么才打印了登陆成功了,
</script>
复制代码