计算机进程
定义:进程是可运行一个或多个线程的计算机程序的实例,进程依附于操作系统,它包含了程序代码、分配的系统资源、物理和逻辑访问权限以及用于启动、控制和协调执行活动的数据结构。
特点:
1.一个进程可以同时执行多个线程;
2.计算机程序是一个存储于磁盘上的被动指令集合,而进程则作为这些指令被加载至内存后的执行,也就是计算机程序的实例。
3.多进程可与同一个计算机程序关联,因为可能存在多个计算机程序实例的情况。有些软件需要进行模块化处理以提升软件的可维护性,或者存在并行处理需求的软件提升处理效率等。例如Google浏览器的多进程架构,区分为浏览器进程、渲染进程、GPU进程和插件进程等,将不同的任务模块分配到独立的进程中,提升Google浏览器整体的稳定性和可维护性。
来自维基百科的英文文档
计算机线程
定义:在计算机科学中,线程是由调度器独立管理的最小的编程指令序列,是操作系统的一部分,作为操作系统调度执行的最小单位。
特殊说明:
1.通常线程作为进程的执行单位,一个进程可以有多个线程。
2.在给定的进程中可以同时执行多个线程。
3.在给定的时间内,线程可以共享进程中的资源,例如可执行代码以及动态分配的变量和非线程局部的全局变量的值等。
来自维基百科的英文文档
计算机协程
协程(Coroutine)是一种计算机程序组件,它是一种可以暂停和恢复执行的函数或子程序。协程可以在执行过程中暂停,让出控制权给其他协程,然后在需要时恢复执行。这种能力使得协程在编写异步和并发代码时非常有用。
在许多编程语言中,协程通常与线程或进程相比具有更轻量级的特性,因为它们在同一线程内运行,共享同一片内存,不涉及线程切换或进程创建的开销。因此,协程在编写高效的并发代码时可以提供更好的性能和资源利用率。
协程与线程的区别
1.协程是协作式多任务,线程是抢占式多任务。所以协程是主动让出调用权,线程则是抢夺调用权。
2.在协程之间的切换不需要涉及任何系统调用或任何阻塞调用,而线程需要。
3.协程并发而不并行,通常运行于单线程,例如Unity的协程运行于主线程上,线程可并行。
4.协程相比线程更轻便,创建和销毁更快速。
5.协程适合处理I/O密集型任务和高并发任务,线程适合处理CPU密集型任务和并行任务。
JIT和AOT编译技术
两种编译技术均用于将高级代码转换为机器代码。
JIT是实时编译技术,首先将源代码转换为中间代码,再在运行时将中间代码转换为机器代码同时会根据目标平台的特性优化生成的机器代码,这个技术会减少可执行程序的大小,但是会增加程序启动的时间,因为需要在运行时进行编译。
AOT是预编译技术,将源代码直接编译为机器代码,这种方式会增大可执行程序的大小,但是会减少程序启动的时间。
JIT适用于具备跨平台特性的编程语言,例如Java、C#、JS等。
AOT适用于对性能和启动时间要求较高的应用场景,例如本地桌面程序、嵌入式系统等。
类型安全
类型安全是指编程语言能够在编译时或运行时强制保持变量和表达式的类型一致,防止出现不符合语言规定的类型错误。类型安全涉及到编译时和运行时的类型检查、类型转换检查以及空指针和空引用的处理等。一些静态类型语言(如Java、C#)在编译时强制执行类型安全,而动态类型语言(如Python、JavaScript)通常在运行时执行类型检查来确保类型安全。
闭包
闭包通常用于一个函数中嵌套的内部函数,当该内部函数使用外部函数的变量时,即使外部函数执行完毕,内部函数依旧会保持对外部函数变量的访问,从而保存并记录函数状态。通常来说执行一个普通的函数,当执行完成或返回值后便会从栈中移除当前函数的上下文,然后回到调用点,而闭包则使得外部函数保持初始状态。最直观的例子就是外部函数接收的参数,当多次使用闭包时,这个参数依旧存在并维持传递的初始值。
内存泄漏
内存泄漏是指程序中分配出的内存由于某种原因无法被正常释放和回收,导致系统可用内存减少,最终导致程序或系统变得不稳定甚至崩溃。某些情况下对于手动申请的内存应该适时地进行释放,例如在C++中通过new或malloc申请内存,则需要通过delete或free来释放内存,对于一些由GC自动管理内存的编程语言,我们需要避免循环引用的问题,合理使用内存。
引用循环
对象A在引用对象B的同时,对象B也在引用对象A,从而导致引用陷入死循环,二者会不断占用资源,且无法正常释放和回收资源。
GPU
GPU全名为图形处理单元(Graphic Process Unit),它最初被设计用于加速计算机图像和图形处理,后来发现它的并行结构同样适合用于处理并行相关的非图像问题,例如神经网络的训练和加密货币的挖掘等。
如果这篇文章对你有帮助,请给作者点个赞吧!