content
- What is asynchronous programming? (JavaScript) 1.1 怎么在JavaScript中进行异步编程?
- 其他语言的异步编程
- 多线程编程 (c++) a. 什么是多线程?与硬件的关系是什么? b. 使用多线程意味着什么? c. 使用多线程的目标是什么?
- 其他语言的多线程编程
- 多线程与异步编程的关系 (主要讲GoRotine,分析源码,看一下rust有没有改进)
- GPU并行编程
introduction
background
我们这个系列主要是讲异步和多线程。异步和多线程本质上来讲都是为了充分的利用计算资源。
当CPU单核主频的发展速度达到瓶颈之后,往多核CPU发展。同时GPU的并行运算给LLM的发展有着极大的促进作用。当然我这一个系列主要是讲CPU,这里我只是想表明并行计算这个概念在现在这个时代非常重要。
那么异步编程是指什么?它和多线程是什么关系?多线程与硬件的关系是什么?异步编程&多线程编程与并行计算又有什么关系?我们将通过这个系列搞清楚这些问题。
我将会不定期的更新这个系列的文章
in this article
在这篇文章里面我会介绍: 1. JavaScript中的异步编程 b. promise c. await 2. 怎么判断IO操作有没有结束?(源码) a. 网络操作 b. 文件操作 c. 有没有浪费资源呢? 对于cpu来讲是没有的,因为就算
实验环境
OS: Windows 11 21H2 22000.2538
Node.js: 20.13.1
Promise
为什么要讲promise?
代码github链接
画流程图,标注一下与回调函数的关系 callbacks
解释
await
“async” 这个单词表达了一个简单的事情:即这个函数总是返回一个 promise,如果正常return,就是resolve(returned value),如果异常或者主动返回一个reject了的promise也可以触发reject
await 接受thenable(什么是thenable,只要这个对象具有符合 Promise/A+ 规范的 then 方法即可),如果不是thenable,是具体的值,会立刻解决
await只能和async配合使用,async可以单独使用。
怎么判断IO操作有没有结束?(源码)
网络操作
文件操作
异步真的没有浪费资源吗?
事实上在同步编程里面,如果某线程傻傻等待不做任何事件,CPU也不会浪费资源,因为操作系统会把CPU的时间片分配给其他的进程。但这就是操作系统层面的调度了,但是对于线程层面的调度来讲,还是需要异步操作。那么对于进程层面的调度呢?是可以用多线程来解决的,但是比较麻烦。其实异步操作里面大都用了多线程,异步操作和多线程的关系还是很紧密的。简单来讲,现在的异步操作同时大大简化了多线程的管理。
在讲多线程之前,我们会浏览一下异步操作在其他编程语言上的实现。更有利于我们去了解异步与多线程之间的关系。
Comments
comments powered by Disqus