并行(parallel)和并发(concurrency)

并行(parallel)和并发(concurrency)是两个不同的概念。
并行是指多个任务同时都在执行,一般通过多线程、多进程或多台计算机实现。
并发是指至少两个任务都在推进,不一定是并行的,也可以是时间片切分的方式串行。

Windows 3.x时的协作式多任务(cooperative multitasking),是基于并发的多任务,一个进程交出执行权后下一个进程才能继续执行。Windows NT 3.1开始微软支持了抢占式多任务(preemptive multitasking),这个是通过CPU支持的时间片切分,给程序提供了虚拟的并行线程。而在多处理器系统或者多核系统上,才是真正的多线程同时并行。

类似的,异步(async)未必一定是并行的,但一定是并发的。比如jQuery、NodeJS都是Javascript的异步编程框架,但Javascript是单线程的(Web-worker除外),这个异步是基于并发的,而不是并行。C# 5的异步编程语法await,对UI线程而言,是利用UI线程消息循环实现的并发异步,而对背景线程而言,是利用线程池的并行异步。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# 是一种广泛应用于Windows平台的面向对象编程语言,其并发编程和并行编程是设计高性能和可扩展应用程序的关键特性。以下是C#中并发并行编程的一些核心概念: 1. **并发(Concurrent Programming)**:在单个处理器上同时执行多个任务或线程,这些任务可以在不同的时间点或以不同的频率交替执行。C# 提供了Thread类和Task类来进行并发操作,通过异步编程模型(async/await)可以更优雅地管理线程。 2. **线程(Threads)**:在C#中,线程是执行代码的基本单位。使用System.Threading命名空间中的Thread类可以创建和管理线程,包括启动、同步、中断等。 3. **Task Parallel Library (TPL)**:这是C#的一个库,提供了更高级别的并行编程支持,比如Task类,它可以更容易地进行并行任务分派,提供异步阻塞和非阻塞模式,以及自动的线程池管理。 4. **线程池(Thread Pool)**:线程池是预先创建的一组线程,用于处理短时间的、可复用的、并发任务。C#的线程池由ThreadPool类管理,可以提高资源利用率并避免频繁创建和销毁线程的开销。 5. **并发安全(Concurrency Safety)**:C#提供了锁(lock)、Monitor、Interlocked等同步机制来确保并发环境下的数据一致性。此外,还推荐使用async/await和Concurrent Collections(如ConcurrentDictionary)等特性避免竞态条件。 6. **并行计算(Parallel Computation)**:C#的并行计算涉及大规模数据集的分解和并行处理,可以利用多核处理器的性能。Parallel LINQ(PLINQ)是一个简化并行查询和迭代的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值