1 / 21

Thread basics

Thread basics. A computer process. Every time a program is executed a process is created It is managed via a data structure that keeps all things memory related Global address space File-handle table Heap data. A computer process. When swapping processes for execution:

chase-lee
Download Presentation

Thread basics

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Thread basics

  2. A computer process • Every time a program is executed a process is created • It is managed via a data structure that keeps all things memory related • Global address space • File-handle table • Heap data

  3. A computer process • When swapping processes for execution: • All things in that d.s. have to be brought to disk • Large chunks of memory contents • Process lots of memory • Swapping processes is expensive, lots of memory have to be moved around. • Swapping (context swapping) is measured in seconds

  4. Thread • Sequence of byte code instructions executed by the JVM; thus a thread consists of two things: • A sequence of code • Its execution • This sequence forms a path of code through a program sequence • No notion of objects or methods here • Sequences of instructions (threads) can overlap, also they can execute simultaneously on multiple threads

  5. Thread data structure • It contains data to keep track of this sequence and its execution • Contents of the registers • Position of execution in the instruction sequence • Run-time stack (LIFO) made up of activation records (created for methods to contain local variables, parameters, return pointer) • Life-time: threads are created and terminated.

  6. Swapping threads • OS typically swaps a thread • Push registers on the thread’s stack • Add thread d.s. to an OS list • Pull a different thread’s d.s off that list • Pop thread’s local stack into register set. • Thread swapping is measured in milliseconds. • Thus: threads are lightweight processes • A process is equivalent to Java’s virtual machine • A thread is process state, ie a virtual machine state.

  7. Threads and Processes • Important: threads share the memory allocated to the process. • Thus, given two threads: • May share instruction sequence • May share memory • As a consequence: • Two threads may share program’s data and methods to modify it • This is what makes threads hard to program. You need to carefully design for: • The commands executed by possibly multiple threads • The queries executed by possibly multiple threads • The time when that execution must occur. • How to design threaded programming: • By synchronizing (locking) the actions caused by each thread that shares data with other threads.

  8. Managing threads • If a thread manipulates data that is not shared by any other thread, no need to manage this sequence of execution, no need for synchronization. • Example of such case. Given two threads, each has its own stack: • Two threads do not share methods local variables and parameters. • If a method does not access any heap data ( thus no access to objects and their fields), it can be executed simultaneously by multiple threads without explicit synchronization.

  9. Multi-threaded programming • Modern OS allow multiple threads to be running concurrently within a process. • When JVM is started • A new process is created • Many threads can be created (spawned) in it. • One thread spawned is the thread having as execution sequence given by the “main”.

  10. Default threads in JVM • The “main” thread: • Spawned by the JVM when the process is created. • Beginning sequence is given by the main(). • Executes all statements in main() • Dies when main() completes execution.

  11. Default threads in JVM • The “garbage collection” thread: • Spawned by the JVM when the process is created. • The sequence of code it executes is the code written to discard objects and reclaim memory. • Thus any Java program has at least two threads executing: we say that a Java program runs in a multi-threaded environment.

  12. Default threads in JVM • If the program contains a GUI interface a new thread is created: The “event-handling” thread: The sequence of instructions it executes is • the code associated with listeners. • Events coming from the OS. • This means that if this thread is executing code of a listener, any mouse click or key press is put on hold until this thread terminates what is doing. • As a consequence we have an unresponsive user interface: one that appears to hang.

  13. Thread safety • The phrase “thread safe” is used to describe a method that can run safely in a multi-threaded environment • Accesses process-level data (shared memory by several processes) in a safe and efficient way. • The goal in designing multi-threaded programs is to achieve thread safety among other properties. • This is usually a hard goal to achieve, one you must design up-front about, and one whose bugs are not only hard to pin-point but difficult to remove.

  14. Why multi-threaded programming? • Better interaction with user • Simulation of simultaneous activities in one processor machine • Exploitation of multi-processor machines • Execution of computation code while doing I/o. Specially useful in network programming. • Allow multiple user to execution same code simultaneously . Specially useful in network programming. • Better Object oriented design.

  15. Why understanding and using threads • All nontrivial applications for the Java platform are multithreaded, whether you like it or not. • It's not ok to have an unresponsive UI. • It’s not ok for a server to reject requests.

  16. When multi-threaded programming might not be good • Threads carry overhead both in space and time. • Thread management. • All this cost must be considered when considering designing for threads.

  17. Thread behavior is platformdependent! • You need to use the OS threading system to get parallelism (vs. concurrency) • Different operating systems use different threading models (more in a moment). • Behavior often based on timing. • Multi-threaded apps can be slower than single-threaded apps (but be better organized)

  18. Priorities • The Java™ programming language has 10 levels • The Solaris™ OS has 2 31 levels • NT™ offers 5 (sliding) levels within 5 "priority classes." • NT priorities change by magic. • After certain (unspecified) I/O operations priority is boosted(by an indeterminate amount) for some (unspecified) time. • Stick to Thread.MAX_PRIORITY, • Thread.NORM_PRIORITY,Thread.MIN_PRIORITY)

  19. Threading models • Cooperative (Windows 3.1) • A Thread must voluntarily relinquish control of the CPU. • Fast context swap, but hard to program and can’t leveragemultiple processors. • Preemptive (NT) • Control is taken away from the thread at effectively random times. • Slower context swap, but easier to program and multiple threads can run on multiple processors. • Hybrid (Solaris™ OS, Posix, HPUX, Etc.) • Simultaneous cooperative and preemptive models are supported.

  20. Do not assume a particular environment • Assume both of these rules, all the time: • A thread can prevent other threads from running if it doesn't occasionally yield • by calling yield(), performing a blocking I/O operation, etc. • A thread can be preempted at any time by another thread • even by one that appears to be lower priority than the current one.

  21. Conclusion • Easy to start using threads, VERY tough to master. • Designing classes that contain methods that are thread safe is a challenge. • Read: javadoc for the class java.lang.Thread

More Related