任务管理器可以查看进程和线程数,也可以用来杀死进程
tasklist 查看进程
taskkill 杀死进程
ps -fe 查看所有进程
ps -fT -p <PID> 查看某个进程(PID)的所有线程
kill 杀死进程
top 按大写 H 切换是否显示线程
top -H -p <PID> 查看某个进程(PID)的所有线程
jps 命令查看所有 Java 进程
jstack <PID> 查看某个 Java 进程(PID)的所有线程状态
jconsole 来查看某个 Java 进程中线程的运行情况(图形界面)
jconsole 远程监控配置
需要以如下方式运行你的 java 类
修改 /etc/hosts 文件将 127001 映射至主机名
如果要认证访问,还需要做如下步骤
复制 jmxremotepassword 文件
修改 jmxremotepassword 和 jmxremoteaccess 文件的权限为 600 即文件所有者可读写
连接时填入 controlRole(用户名),R&D(密码)
比如,word启动后就是一个进程,ie浏览器启动后也是一个进程
账号服务器和游戏逻辑服务器开启后也是一个进程,所以可能发生的就是 服务器进程之间的通信
如果在同一个电脑上,进程间的通信的方式可以是——
如果是不同电脑上,则可以使用
线程更像是轻量级的进程,每个线程都有自己独立的运行路径,但是一个进程中的所有线程都是共享地址空间的(也就是 共享内存 ),比如说全局变量,指针,引用这些,都是可以 在线程之间传递 的。相比于进程之间需要通信,多线程的开销是远远小于多进程的。
当然共享内存也有新问题,比如 数据一致性问题 ,比如线程A和线程B如果同时要向地址空间中写数据,当然应该有一个先后,不然会产生 覆盖 。Android笔记多进程通信之利用Messenger跨进程通信,
提起跨进程通信,大多数人首先会想到AIDL,AIDL,中文名称是android接口描述语言,是android系统中用于进行跨进程通信必须了解的。其实messenger和AIDL作用一样,都可以进行进程间通讯。它是基于消息的进程间通信,通过构建Message来在客户端和服务端之间传递数据,就像Handler发送消息在子线程和UI线程发送消息那样,还不用去写AIDL文件。
Messenger翻译为信使,可以在不同进程中传递Message对象,在Message中放入我们需要传递的信息,然后通过Messenger将Message传递给对方,就可以轻轻松松实现跨进程数据传递。实际上Messenger是一种轻量级的IPC(跨进程通信)方式,它的底层仍然是实现的AIDL。
此外,还支持记录客户端对象的Messenger,然后可以实现一对多的通信;甚至作为一个转接处,任意两个进程都能通过服务端进行通信。
相同点:
1都与IPC的调用有关;
2Messenger 是一种轻量级的 IPC方案,底层实现了AIDL,只是进行了封装,开发的时候不用写aidl文件。
3都支持实时通信;
不同点:
1 Messenger一次只能处理一个请求(串行)/AIDL一次可以处理多个请求(并行);
当您需要执行 IPC 时,为您的接口使用 Messenger 要比使用 AIDL 实现更加简单,因为 Messenger 会将所有服务调用排入队列,而纯粹的 AIDL 接口会同时向服务发送多个请求,服务随后必须应对多线程处理。
对于大多数应用,服务不需要执行多线程处理,因此使用 Messenger 可让服务一次处理一个调用。如果您的服务必须执行多线程处理,则应使用 AIDL 来定义接口。
2 Messenger不支持RPC,只能通过message传递消息/AIDL支持RPC;
3 Messenger使用简单,轻量级,不需要创建AIDL文件/AIDL使用复杂,需要创建AIDL文件;
服务端:
1创建一个handler对象,并实现hanlemessage方法,用于接收来自客户端的消息,并作处理
2创建一个messenger,封装handler
3用messenger的getBinder()方法获取一个IBinder对象,通过onBind返回给客户端
客户端:
1在activity中绑定服务
2创建ServiceConnection并在其中使用 IBinder 将 Messenger实例化
3使用Messenger向服务端发送消息,或需要服务器端返回消息,需要创建一个messenger,封装handler,并将这个messenger传递给服务器端。在handler中接收服务器消息。这样就实现了客户端和服务端的双向通信了。
4解绑服务
5服务端中在 handleMessage() 方法中接收每个 Message
创建一个service
注册service,当然要设置在不同的进程
注意:Service在声明时必须对外开放,即android:exported="true"
客户端是通过绑定服务端返回的binder来创建Messenger对象,并通过这个Messenger对象来向服务端发送消息。
总结
Message中的Bundle支持多种数据类型,replyTo字段用于传输Messager对象,以便进程间相互通信
Messager以串行的方式处理客户端发来的消息,不适合有大量并发的请求
Messager方法只能传递消息,不能跨进程调用方法
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)