进程线程问题

来源:互联网 发布:java股票撮合源码 编辑:程序博客网 时间:2024/04/29 22:52

进程和线程

进程:具有一定独立功能的程序的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.。
线程:进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

关系:  
(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。 

(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。  

(3)处理机分给线程,即真正在处理机上运行的是线程。  

(4)线程在执行过程中,需要协作同步。

区别:

(1)线程不能够独立执行,必须依存在具体的进程中,由进程提供多个线程执行控制。 

(2)从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

引入线程的好处:

(1)易于调度。
(2)提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分。  
(3)开销少。创建线程比创建进程要快,所需开销很少。  
(4)利于充分发挥多处理器的功能。  

多线程编程要注意的问题:

(1)线程同步的问题,避免死锁的发生;

(2)cpu利用率的问题,线程不宜太多;

(3)处理好线程的创建与终结的问题


MVC模式原理及其优缺点

原理:
    mvc是一种程序开发设计模式,它实现了显示模块与功能模块的分离。提高了程序的可维护性、可移植性、可扩展性与可重用性,降低了程序的开发难度。它主要分模型、视图、控制器三层。 
(1)模型(model)它是应用程序的主体部分,主要包括业务逻辑模块(web项目中的Action,dao类)和数据模块(pojo类)。模型与数据格式无关,这样一个模型能为多个视图提供数据。
由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性 
(2)视图(view) 用户与之交互的界面、在web中视图一般由jsp,html组成 
(3)控制器(controller)接收来自界面的请求 并交给模型进行处理 在这个过程中控制器不做任何处理只是起到了一个连接的做用 

优点 
(1)可以为一个模型在运行时同时建立和使用多个视图。
(2)视图与控制器的可接插性,允许更换视图和控制器对象。
(3)模型的可移植性。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。
(4)潜在的框架结构。可以基于此模型建立应用程序框架,不仅仅是用在设计界面的设计中。 

不足之处 
(1)增加了系统结构和实现的复杂性。
(2)视图与控制器间的过于紧密的连接。 
(3)视图对模型数据的低效率访问。

Linux进程间通信方式

(1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。

(2)命名管道(named pipe):命名管道克服了管道没有名字的限制,还允许无亲缘关系进程间的通信。命名管道在文件系统中

有对应的文件名。命名管道通过命令mkfifo或系统调用mkfifo来创建。

(3)信号(Signal):用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身。

(4)消息(Message)队列:消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺陷。

(5)共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式,是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。

(6)内存映射(mapped memory):允许任何多个进程间通信,每一个使用该机制的进程通过把一个共享的文件映射到自己的进程地址空间来实现它。

(7)信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。

(8)套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。

0 0