当前位置: 首页 > wzjs >正文

钟祥网站建设如何制作简单的网页链接

钟祥网站建设,如何制作简单的网页链接,做网站开发实习生怎么样,公司网站想自己做移动端六大语言速记:第9部分 - 并发与多线程 本文将对比Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift这六种移动端开发语言在并发与多线程方面的特性,帮助开发者理解和掌握各语言的并发编程机制。 9. 并发与多线程 9.1 线程与进程 各语言线程与进程的创建和管理方…

移动端六大语言速记:第9部分 - 并发与多线程

本文将对比Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift这六种移动端开发语言在并发与多线程方面的特性,帮助开发者理解和掌握各语言的并发编程机制。

9. 并发与多线程

9.1 线程与进程

各语言线程与进程的创建和管理方式对比:

语言线程创建方式进程创建方式线程池支持线程生命周期管理
JavaThread类, Runnable接口ProcessBuilderExecutorService状态管理,中断机制
Kotlin继承Java线程模型,协程继承Java进程模型ExecutorService,协程调度器协程作用域,Job管理
DartIsolate(类似进程)不直接支持无原生线程池Isolate控制,Stream
Pythonthreading模块multiprocessing模块concurrent.futures守护线程,join方法
ArkTSWorker(类似Web Worker)不直接支持不直接支持Worker生命周期管理
SwiftThread, OperationProcessOperationQueue取消操作,依赖管理
示例对比

Java:

// 使用Thread类创建线程
Thread thread1 = new Thread(new Runnable() {@Overridepublic void run() {System.out.println("线程1运行中...");try {Thread.sleep(1000); // 休眠1秒} catch (InterruptedException e) {e.printStackTrace();}System.out.println("线程1完成");}
});
thread1.start(); // 启动线程// 使用lambda表达式简化
Thread thread2 = new Thread(() -> {System.out.println("线程2运行中...");System.out.println("线程2完成");
});
thread2.start();// 线程池示例
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;ExecutorService executor = Executors.newFixedThreadPool(5); // 创建固定大小为5的线程池
for (int i = 0; i < 10; i++) {final int taskId = i;executor.execute(() -> {System.out.println("任务" + taskId + "由线程" + Thread.currentThread().getName() + "执行");});
}
executor.shutdown(); // 关闭线程池// 进程创建示例
try {ProcessBuilder processBuilder = new ProcessBuilder("notepad.exe");Process process = processBuilder.start();// 等待进程结束int exitCode = process.waitFor();System.out.println("进程退出码: " + exitCode);
} catch (Exception e) {e.printStackTrace();
}

Kotlin:

// 使用Thread类创建线程
val thread1 = Thread {println("线程1运行中...")Thread.sleep(1000) // 休眠1秒println("线程1完成")
}
thread1.start() // 启动线程// 使用协程
import kotlinx.coroutines.*// 在主线程中启动协程
fun main() = runBlocking { // 创建一个阻塞协程,通常用于main函数launch { // 在当前协程作用域中启动新协程println("协程1运行中...")delay(1000) // 非阻塞休眠1秒println("协程1完成")}launch {println("协程2运行中...")delay(500)println("协程2完成")}println("主协程等待子协程完成")
} // runBlocking会等待内部所有协程完成// 协程作用域和取消示例
val job = GlobalScope.launch {try {println("长时间运行的任务开始")repeat(1000) { i ->println("任务进度: $i")delay(100)}} catch (e: CancellationException) {println("任务被取消")} finally {println("清理资源")}
}// 5秒后取消任务
delay(5000)
job.cancel()
job.join() // 等待任务完成取消// 使用协程调度器
val dispatcher = Dispatchers.IO // IO密集型任务的调度器
val job2 = GlobalScope.launch(dispatcher) {// 在IO线程池中执行println("在IO线程池中执行: ${Thread.currentThread().name}")
}

Dart:

// Dart使用Isolate而非线程
import 'dart:isolate';
import 'dart:async';// 在新Isolate中执行的函数
void isolateFunction(SendPort sendPort) {sendPort.send('Hello from isolate!');
}// 创建和使用Isolate
Future<void> createIsolate() async {// 创建通信通道final receivePort = ReceivePort();// 启动新的Isolateawait Isolate.spawn(isolateFunction, receivePort.sendPort);// 接收消息receivePort.listen((message) {print('收到消息: $message');receivePort.close(); // 关闭通信端口});
}// 在Flutter中使用compute函数在后台Isolate中执行计算密集型任务
import 'package:flutter/foundation.dart';// 计算密集型函数
int computeFactorial(int n) {int result = 1;for (int i = 2; i <= n; i++) {result *= i;}return result;
}// 在UI中调用
void calculateInBackground() async {final result = await compute(computeFactorial, 20);print('20的阶乘是: $result');
}

Python:

# 使用threading模块创建线程
import threading
import timedef task(name, delay):print(f"{name}开始运行")time.sleep(delay)  # 模拟耗时操作print(f"{name}完成")# 创建线程
thread1 = threading.Thread(target=task, args=("线程1", 2))
thread2 = threading.Thread(target=task, args=("线程2", 1))# 启动线程
thread1.start()
thread2.start()# 等待线程完成
thread1.join()
thread2.join()
print("所有线程完成")# 使用线程池
from concurrent.futures import ThreadPoolExecutordef worker(num):print(f"任务{num}开始")time.sleep(1)return f"任务{num}的结果"# 创建线程池
with ThreadPoolExecutor(max_workers=3) as executor:# 提交任务并获取Future对象futures = [executor.submit(worker, i) for i in range(5)]# 获取结果for future in futures:print(future.result())# 使用multiprocessing模块创建进程
from multiprocessing import Processdef process_task():print(f"进程{Process.current().pid}运行中")time.sleep(2)print(f"进程{Process.current().pid}完成")if __name__ == "__main__":  # 在Windows上必须有这个保护# 创建进程process = Process(target=process_task)process.start()process.join()print("主进程继续执行")

ArkTS:

// 使用Worker在后台线程执行任务
import worker from '@ohos.worker';// 创建Worker
function createWorker() {// 创建Worker实例,指定Worker脚本文件路径const workerInstance = new worker.Worker('workers/worker.ts');// 监听Worker消息workerInstance.onmessage = (message) => {console.log(`从Worker收到消息: ${message.data}`);};// 监听Worker错误workerInstance.onerror = (error) => {console.error(`Worker错误: ${error.message}`);};// 向Worker发送消息workerInstance.postMessage('开始计算');// 一段时间后终止WorkersetTimeout(() => {workerInstance.terminate();console.log('Worker已终止');}, 5000);
}// worker.ts文件内容
// 接收主线程消息
onmessage = (message) => {console.log(`Worker收到消息: ${message.data}`);// 执行耗时计算let result = 0;for (let i = 0; i < 10000000; i++) {result += i;}// 向主线程发送结果postMessage(`计算结果: ${result}`);
};

Swift:

// 使用Thread创建线程
import Foundation// 创建线程
let thread = Thread {print("线程运行中...")Thread.sleep(forTimeInterval: 1) // 休眠1秒print("线程完成")
}
thread.start() // 启动线程// 使用Operation和OperationQueue
import Foundation// 创建自定义Operation
class CustomOperation: Operation {let taskID: Intinit(taskID: Int) {self.taskID = taskIDsuper.init()}override func main() {// 检查是否被取消if isCancelled {return}print("任务\(taskID)开始执行")// 模拟耗时操作Thread.sleep(forTimeInterval: 2)print("任务\(taskID)完成")}
}// 创建OperationQueue
let queue = OperationQueue()
queue.maxConcurrentOperationCount = 2 // 设置最大并发数// 添加操作到队列
for i in 1...5 {let operation = CustomOperation(taskID: i)queue.addOperation(operation)
}// 添加操作完成块
let completionOperation = BlockOperation {print("所有任务完成")
}// 设置依赖关系,completionOperation会在队列中所有操作完成后执行
for operation in queue.operations {completionOperation.addDependency(operation)
}
queue.addOperation(completionOperation)// 使用Process创建进程
let process = Process()
process.executableURL = URL(fileURLWithPath: "/usr/bin/env")
process.arguments = ["ls", "-la"]let pipe = Pipe()
process.standardOutput = pipetry {try process.run()let data = pipe.fileHandleForReading.readDataToEndOfFile()if let output = String(data: data, encoding: .utf8) {print(output)}
} catch {print("Error: \(error)")
}

9.2 同步机制

各语言同步机制的对比:

语言互斥锁读写锁信号量条件变量原子操作
Javasynchronized, LockReadWriteLockSemaphoreConditionAtomicInteger
Kotlin继承Java同步机制,协程互斥继承Java读写锁继承Java信号量继承Java条件变量继承Java原子类
DartLock (package:synchronized)无原生支持无原生支持无原生支持无原生支持
PythonLock, RLock无原生支持Semaphore, BoundedSemaphoreCondition无原生支持
ArkTS不直接支持,通过Worker通信不直接支持不直接支持不直接支持不直接支持
SwiftNSLock, os_unfair_lockpthread_rwlock_tDispatchSemaphoreNSCondition原子操作函数
示例对比

Java:

// 使用synchronized关键字
class Counter {private int count = 0;// 同步方法public synchronized void increment() {count++;}public synchronized int getCount() {return count;}
}// 使用显式锁
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;class BankAccount {private double balance;private final Lock lock = new ReentrantLock();public void deposit(double amount) {lock.lock();try {balance += amount;} finally {lock
http://www.dtcms.com/wzjs/100146.html

相关文章:

  • 郑州医疗网站建设网络推广员是干嘛的
  • 做网站需准备些什么问题佣金高的推广平台
  • 小程序游戏排行榜2023兰州网络推广优化服务
  • 成人网站vps北京搜索引擎优化主管
  • 西安php网站制作百度有几种推广方式
  • wordpress怎么新建子域名廊坊百度关键词优化怎么做
  • 做网站需要哪些人才凌哥seo技术博客
  • 爱站网权重查询网址之家
  • 网站制作 沈阳网络推广服务费
  • 杜桥做网站哪家好网站百度收录突然消失了
  • 网站关键词搜索优化怎么做全网自媒体平台大全
  • 培训网站开发公司无货源网店怎么开
  • 雪域什么网站是做电影的怎么注册网址
  • dede 网站地图模板htm河南今日头条最新消息
  • 做网站需要提供哪些资料站长工具站长
  • 平台网站建设ppt模板下载广州网站seo
  • 在电脑上怎么做网站网上网络推广
  • 建网站的流程及注意事项seo优化方案总结
  • 成都网站建设学校网站优化公司排名
  • 郑州威客网站建设semiconductor是什么意思
  • 网站首页打开速度网站设计的流程
  • 空中花园做网站的公司个人网站怎么做
  • 王烨飞变形计烟台seo网络推广
  • 国外网站建设设计欣赏互联网运营推广是做什么的
  • 网站升级维护需要多久广州优化营商环境条例
  • 网站建设职业软文推广的标准类型
  • 手机网站建设策划书微信营销平台
  • 天津网站建设找哪家百度快照有什么用
  • 上海专业建网站推广计划
  • 淮南做网站的北京优化seo排名