文档章节

进程/线程概念和Android异步通讯机制

JouTzaShin
 JouTzaShin
发布于 2013/11/17 16:11
字数 1271
阅读 1679
收藏 19

1、操作系统中线程、进程概念

    进程资源分配和调度的独立单位,进程将内存地址空间、程序、数据等资源组织起来,使操作系统容易管理这些资源。


    线程CPU调度和分派的基本单位,线程必须依赖进程而存活,并和其他线程共享依赖的进程的资源。因为线程是独立运行(相对于其他线程而言),所以线程也需要有自己的资源,包括栈、寄存器、状态、程序计时器。线程也和进程一样有、新建、就绪、运行、阻塞、死亡五种状态。

    多线程资源控制,由于线程之间共享进程中的资源,所以同一进程中的多个线程的通讯的重心之一是对共享的资源进行控制,例如当多个线程同时使用进程某个资源时,有可能需要采用互斥/同步等手段保证资源被正确操作,在采用互斥/同步手段时候,需要避免产生死锁的情况。


2、操作系统中 进程/线程通讯概述

    进程之间的通讯(IPC)实质上是不同进程之间线程的通讯。线程之间通讯则一般指的是同一个进程中不同线程(也即是多线程)的通讯。


     1)、进程/线程通讯的目的:1、数据传输 2、共享资源 3、进程控制 4、通知事件

     2)、进程间通讯(IPC)方式:

                1)管道(Pipe),管道是单向的,先进先出,务结构的固定大小的字节流,常用于父子进程的通

                      讯,Socket、流等都是管道的实现方式

                2)信号,用户进程间通讯和同步的原始机制

                3)消息队列,是一个存储消息的链表,允许多个进程向它写/读消息。

                4)共享存储,通常由一个进程维护,其余进程对该内存区域进行读写

                PS:其中的消息队列(Message Queue)和共享内存是Linux的System V IPC 机制中的两种。


3、Android中特有的线程通讯方式的详细描述

    在Android程序中,如果你阻塞一个UI线程多达5秒之后,一般会造成ANR(Application Not Responding)情况的出现,导致程序出现无响应的提示。所以如果要做一些比较耗时的操作,例如与服务器进行数据交互,则需要重开一条线程进行处理。但是随着又引出了一个问题,就是在两条不同的线程之间怎么进行通讯(例如数据传输和通知),例如在一条线程中读取服务器的数据,然后怎么传递该数据给UI线程并通知它更新到界面上去?在android系统里面是利用Handler+MessageQueue+Looper机制来解决同一进程中两个线程间的通讯。实质上也就是,上面所说的操作系统进程间通讯的方式之一消息队列。

接下来从使用该机制和解析该机制是怎么工作的这两个方面来阐述Handler+MeesageQueue+Looper这一通讯机制。


使用该机制:

实质上就是对象的建立和关联)。[PS:以下代码未经过运行,只是为了阐述Handler+MessageQueue+Looper机制]

class ShowAndroidTC  extends Thread{

    public void run(){

        //建立Looper对象并关联到当前线程中,建立Looper的时候,Looper也创建了MessageQueue

          Looper.prepare();

       //建立Handler,在Handler构造器中关联了当前线程的Looper和Looper中的消息队列            

        Handler handler = new Handler(){};//这里省略了重写handleMessage方法

        //循环并开始监听消息队列

         Looper.loop();

    }

}

机制原理解析:

接下来看看该机制怎运行

1、建立一个消息对象(Meesage),并把需要传输的数据存储在该对象中。

2、利用handler,添加该消息对象到消息队列中。在这一步中,Message会关联发送它的Handler对象

3、由于Looper.loop()循环并监听(MessageQueue的queue.next()方法会阻塞Loop),所以监听到有新消息则取出该消息,并根据该消息关联的Handler对象分发消息,并回调该handler对象的handlerMessage(Message msg)方法来处理该消息。

4、消息处理完之后,回收该消息并等待下一条消息(queue.next())。

综上所述,其实传递数据介质利用的是Messge,通知事件利用的是消息分发

PS:括号里面的代码是根据Hanlder、MessageQueue、Message、Looper源代码分析而来。全部类在源代码 android.os包里。

最后,如有本文所述有纰漏或描述不当,甚至有错误,请一定指出,谢谢!

参考文章:

《操作系统中的进程与线程 》

URL:http://www.cnblogs.com/CareySon/archive/2012/05/04/ProcessAndThread.html

百度百科《进程间的通信》

URL:http://baike.baidu.com/view/1492468.htm

《进程和线程的区别》

URL:http://www.cnblogs.com/lmule/archive/2010/08/18/1802774.html




© 著作权归作者所有

共有 人打赏支持
上一篇: XML简述和XML使用
下一篇: 电子商务简述
JouTzaShin
粉丝 0
博文 5
码字总数 2899
作品 0
中山
私信 提问
android基础知识05:四大组件之service 03:实现机制

本文主要介绍service相关内容。包括两篇文章: android基础知识05:四大组件之service 01 android基础知识05:四大组件之service 02:远程调用 android基础知识05:四大组件之service 03:实...

迷途d书童
2012/03/23
385
0
Android IPC进程间通讯机制

一.Linux系统进程间通信有哪些方式? 1.socket; 2.name pipe命名管道; 3.message queue消息队列; 4.singal信号量; 5.share memory共享内存; 二.Java系统的通信方式是什么? 1.socket; ...

Simpleness
2012/06/28
0
0
Android操作系统面试题

一﹑Android手机操作系统的四层架构? 架构框架以此从上到下: 1.Applications (应用程序(应用层)); Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息...

无鸯
2011/09/05
1K
0
Android 进程和线程

Processes and Threads 译者署名: 呆呆大虾 译者微博: http://weibo.com/popapa 版本:Android 3.2 r1 进程和线程 如果某个应用程序组件是第一次被启动,且这时应用程序也没有其他组件在运...

阿酷
2011/11/17
14.7K
3
Android 进程和线程模型

Android进程模型 在安装Android应用程序的时候,Android会为每个程序分配一个Linux用户ID,并设置相应的权限,这样其它应用程序就不能访问此应用程序所拥有的数据和资源了。 在 Linux 中,一...

长平狐
2013/01/06
89
0

没有更多内容

加载失败,请刷新页面

加载更多

操作数据库表

/* DML:数据库操作语言 主要对表中的数据库进行 增删改 ****增:插入一条记录 insert into 表名 (列名1,列名2..) values (值1,值2..) 注意: 1.列名可以在表中选择一列或者几列 2.后面的值 必须...

stars永恒
16分钟前
1
0
你真的了解 volatile 关键字吗?

volatile关键字经常在并发编程中使用,其特性是保证可见性以及有序性,但是关于volatile的使用仍然要小心,这需要明白volatile关键字的特性及实现的原理,这也是本篇文章的主要内容。 一、J...

Henrykin
16分钟前
1
0
条码插件TBarCode Office系列教程二(Word Add-In篇)

TBarCode Office是一款适用于Microsoft Word 2007、2010和2013的条码插件,通过此插件可以轻松的在您的文档中嵌入代码。此系列教程旨在介绍TBarCode Office的常见问题及解答,帮助大家学习使...

ymy_666666
17分钟前
1
0
折腾Java设计模式之命令模式

博客原文地址 折腾Java设计模式之命令模式 命令模式 wiki上的描述 Encapsulate a request as an object, thereby allowing for the parameterization of clients with different requests, ......

大萌小路
17分钟前
2
0
微服务架构:基于微服务和Docker容器技术的PaaS云平台架构设计

基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发、部署、运维管理、持续开发持续集成的流程。平台提供基础设施、中间件、数据服务、云服务器等资...

编程SHA
18分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部