Chormium线程模型及应用指南

简介: 核心概念设计上遵循以下原则:1 不要在UI线程做任何阻塞式的I/O操作,以及其它耗时的操作,通过消息传递把各种操作传给相应用途的线程去做。2 不鼓励线程加锁机制和线程安全对象。

核心概念

设计上遵循以下原则:

1 不要在UI线程做任何阻塞式的I/O操作,以及其它耗时的操作,通过消息传递把各种操作传给相应用途的线程去做。

2 不鼓励线程加锁机制和线程安全对象。对象只存在一个线程,通过消息来实现线程之间的通信,线程之间不互相阻塞。通过callback对象实现跨线程请求。

一般情况下,我们应该利用一个现有的线程,尽量不要创建新的线程。UI线程实际上会被设置为不允许I/O操作,并且不允许等待。 


线程列表

核心线程列表

所属进程 线程名称 类型 职责 实现
 Browser UI / BrowserThread Java Browser的主线程 content::BrowserThreadImpl
 Browser  Chrome_DBThread Native 负责数据库(SQLite)相关的操作,很多功能的实现会用到该线程。 content::BrowserThreadImpl
 Browser  Chrome_FileThread Native 文件的创建、删除、读写等。 content::BrowserThreadImpl
 Browser  Chrome_FileUserBlockingThread Native 用于读取与用户交互有关的数据,需要快速的响应。看到net log模块和appcache有用。 content::BrowserThreadImpl
 Browser  Chrome_ProcessLauncherThread Native 用于启动和终止子进程。 content::BrowserThreadImpl
 Browser  Chrome_CacheThread Native    
        content::BrowserThreadImpl
 Browser  IndexedDB Native IndexDB存储线程。 base::Thread
GPU  Chrome_InProcGpuThread Native GPU的单进程版本实现。 content::InProcessGpuThread
Child Processes Chrome_ChildIOThread Native 子进程的IO线程实现。 base::Thread
Renderer Chrome_InProcRendererThread Native Renderer进程的单进程版本实现。 content::InProcessRendererThread

 

其它线程

线程名称 Module 实现 说明
CookieMonsterClient CAW base::Thread  
CookieMonsterBackend CAW base::Thread  
CookieSyncManager WebView Runnable  
Chrome_libJingle_WorkerThread Browser base::Thread  
Blink Heap Marker Thread (*) Blink base::Thread  
Blink GC Sweeper (*) Blink base::Thread  
HTMLParserThread Blink base::Thread  
AsyncTransferThread gpu gpu::TransferThread  
BrowserBlocking Worker Browser base::SequencedWorkerPool 详见:Chromium中应用C/C++并发技术要点
SimpleCache Worker net base::SequencedWorkerPool  
Network File Thread net base::Thread  

  

线程结构

(以单进程模型

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
2天前
|
监控 Java
在实际应用中选择线程异常捕获方法的考量
【10月更文挑战第15天】选择最适合的线程异常捕获方法需要综合考虑多种因素。没有一种方法是绝对最优的,需要根据具体情况进行权衡和选择。在实际应用中,还需要不断地实践和总结经验,以提高异常处理的效果和程序的稳定性。
10 3
|
6天前
|
调度 Android开发 开发者
构建高效Android应用:探究Kotlin多线程优化策略
【10月更文挑战第11天】本文探讨了如何在Kotlin中实现高效的多线程方案,特别是在Android应用开发中。通过介绍Kotlin协程的基础知识、异步数据加载的实际案例,以及合理使用不同调度器的方法,帮助开发者提升应用性能和用户体验。
22 4
|
6天前
|
数据采集 存储 Java
Crawler4j在多线程网页抓取中的应用
Crawler4j在多线程网页抓取中的应用
|
1月前
|
消息中间件 存储 NoSQL
剖析 Redis List 消息队列的三种消费线程模型
Redis 列表(List)是一种简单的字符串列表,它的底层实现是一个双向链表。 生产环境,很多公司都将 Redis 列表应用于轻量级消息队列 。这篇文章,我们聊聊如何使用 List 命令实现消息队列的功能以及剖析消费者线程模型 。
84 20
剖析 Redis List 消息队列的三种消费线程模型
|
13天前
|
数据挖掘 程序员 调度
探索Python的并发编程:线程与进程的实战应用
【10月更文挑战第4天】 本文深入探讨了Python中实现并发编程的两种主要方式——线程和进程,通过对比分析它们的特点、适用场景以及在实际编程中的应用,为读者提供清晰的指导。同时,文章还介绍了一些高级并发模型如协程,并给出了性能优化的建议。
21 3
|
13天前
|
Java 数据处理 数据库
Java多线程的理解和应用场景
Java多线程的理解和应用场景
39 1
|
18天前
|
NoSQL Redis 数据库
Redis单线程模型 redis 为什么是单线程?为什么 redis 单线程效率还能那么高,速度还能特别快
本文解释了Redis为什么采用单线程模型,以及为什么Redis单线程模型的效率和速度依然可以非常高,主要原因包括Redis操作主要访问内存、核心操作简单、单线程避免了线程竞争开销,以及使用了IO多路复用机制epoll。
35 0
Redis单线程模型 redis 为什么是单线程?为什么 redis 单线程效率还能那么高,速度还能特别快
|
6天前
|
安全 调度 C#
STA模型、同步上下文和多线程、异步调度
【10月更文挑战第19天】本文介绍了 STA 模型、同步上下文和多线程、异步调度的概念及其优缺点。STA 模型适用于单线程环境,确保资源访问的顺序性;同步上下文和多线程提高了程序的并发性和响应性,但增加了复杂性;异步调度提升了程序的响应性和资源利用率,但也带来了编程复杂性和错误处理的挑战。选择合适的模型需根据具体应用场景和需求进行权衡。
|
1月前
|
负载均衡 Java 调度
探索Python的并发编程:线程与进程的比较与应用
本文旨在深入探讨Python中的并发编程,重点比较线程与进程的异同、适用场景及实现方法。通过分析GIL对线程并发的影响,以及进程间通信的成本,我们将揭示何时选择线程或进程更为合理。同时,文章将提供实用的代码示例,帮助读者更好地理解并运用这些概念,以提升多任务处理的效率和性能。
51 3
|
1月前
|
Java 开发者
Java中的多线程基础与应用
【9月更文挑战第22天】在Java的世界中,多线程是一块基石,它支撑着现代并发编程的大厦。本文将深入浅出地介绍Java中多线程的基本概念、创建方法以及常见的应用场景,帮助读者理解并掌握这一核心技术。