day1 你说用coroutine讲30天会不会太过分

说实话,太过分了,根本讲不完(笑

前言

简单介绍一下,我会先讲基础的,再带一点深入的,搭配一些范例和文档,主要是让人看懂会用,至於更深入的知识,需要自己去翻文档,我就挖坑给你们跳

我的文章中不时会把整串的英文贴过来,只要有整串英文的建议一定要看,我会贴的情况有三种

  1. 现有的中文资源,在翻译上有歧异或误区,英文解释得更贴切
  2. 我中文不好,没办法把英文的意思翻译过来
  3. 英文写得太好,我觉得翻译会降低理解度

为什麽要这麽麻烦呢?
文档连结
文档连结
android文档连结
官方blog
影片
等等

痾你知道里面有多少东西吗? 铁人赛的期间刚好我手边还有案子,时间不够,但讲讲基本知识还是够的,每篇我都会放一些资料来源和延伸阅读的文章,同时我会尽量不带原码,连结里同样有别人带着看原码的连结,还是蛮推荐去看的,毕竟不能只有我看过 要了解背後原理

全部文章会采动态更新方式,我会在看到解释更贴切或我有遗漏重要细节时,回来编辑之前的文章,也欢迎各位开发者指出我文章的错误或描述不足的地方

正文

所以第一天也不能水过去,直接开始讲program, process, thread和coroutine吧
对第一点就是,请接受他们的英文名字,毕竟中文翻译後,可能会有翻译落差,名称不同等等情况,重点是我会搞混

首先,program是什麽?

program就是我们工程师平时开ide写的东西,在编译之後会转成机器语言,然後安装在装置的次级储存装置里面

更直白一点,你从play store载了一个app,他就会被安装在手机里,但还不会执行

在图形化介面Graphical User Interface,aka GUI,之中,大部分program会有一个Icon,就好比手机里,每个app都会有一个图示,但它并不是program,他只是一个launch icon,就好比说他是告诉系统,现在要执行哪个程序的按钮

补充,不是所有的program都会有icon

process

process也可称为application,当icon点击之後,Operate system,aka OS,会分配记忆体给program,而process是指已载入记忆体且可被执行的machine code

The term process (Job) refers to program code that has been loaded into a computer’s memory so that it can be executed by the central processing unit (CPU). A process can be described as an instance of a program running on a computer or as an entity that can be assigned to and executed on a processor. A program becomes a process when loaded into memory and thus is an active entity.

英文连结
中文连结1
中文连结2
中文连结3
我没有要冲字数,是中文的描述不同,只好去看英文的,中文有人说是已经执行的,有人说是还没执行的,但我们都知道cpu才是真正工作的地方,那从上面的英文来看,process是指在一台电脑里(running)运行的程序实体,或是可被指派给处理器操作的实体。

另外,关於process还有几个特点

  1. OS 分配资源的最小单位,可以从 OS 得到如 CPU Time、Memory…等资源,意思是这个 process 在运行时会消耗多少 CPU 与记忆体。
  2. 不同的 Process 所分配到的记忆体空间 (Memory Space) 是互相独立的,因此 Process 之间不会共享资源 (ex: 记忆体、变数)。
  3. process里面会有很多thread'
  4. 一个program可以产生一个或多个process
  5. 一个cpu一次只能执行一个process

thread

已经了解了program和process,是时候讲讲thread了
一个process里面会有多个thread,每个thread可以完成一个或多个任务(功能),实际在处理任务的是在thread,process则是thread的容器,而同一个process里面的thread可以互享资源

以client来说,透过io thread,发出api请求,收到回覆後写入本地资料库,就是在io thread做多个任务

coroutine

coroutine是甚麽?
有人说他是轻量级的线程,有人说他是用户态的线程,有人说他不是线程,而是协作式的组件
依我看,他既不是轻量级,也不是用户态,更不是组件,他就是一块绿豆糕
meme

ㄚㄚ偏题了,其实coroutine就是一套官方提供的线程api,上面讲这麽多,coroutine就是一个线程框架 by.扔物线. GOOGLE认证讲师

尽管java有thread, executor, RxJava等等thread切换工具,但coroutine藉助了kotlin的语法,让coroutine用起来更加方便,而且能以看似同步的写法写出异步操作,後面29天都会在讲coroutine

扔物线影片

连结统整:
如果想更深入了解这几个之间的概念,这两篇可以参考,我就不多加描述了
【恐龙】理解 Process & Thread

geeksforgeeks difference-between-program-and-process

这几篇可以搭配服用
中文连结1
中文连结2
中文连结3

扔物线影片


<<:  Day02 WebRTC 简介

>>:  【Day1】前言X动机X首款宠物约散Android平台APP

【Day9】React Proptype的验证及套用方法看这里 ! ٩(●˙▿˙●)۶…⋆ฺ

如果我们想要强迫传来的Prop是某种型态或是强迫某个Prop一定要被传入的话, 我们可以使用Prop...

DAY 25 制作表格-添加中文字体

添加中文字体 在安装matplotlib後,因为我们的资料内含有中文字,而matplotlib内建并...

第3车厢-学会切版保证班?CSS的宝藏图

本篇公开自身学会切版的秘密武器是...,及分享学习CSS当中最重要的css盒模型概念 昨天文章中我...

Day 9. Compare × Final

Conclusion 呼~到今天为止 9 天过去了,Libraries 之间的比较篇章也到今天告一...

[Day30] grid z-index 分层 / order 顺序

终於也进入到尾声了,最後一章要介绍网格项目的分层与顺序。 z-index 分层 .item { z-...