1 / 11

Reusable Threads for Distributed Software Engineering

This article discusses the reuse of threads in distributed software engineering, addressing issues such as thread creation, deallocation, and termination. It proposes a solution using reusable threads and provides an evaluation of its effectiveness.

Download Presentation

Reusable Threads for Distributed Software Engineering

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. Reusing threads Distributed Software Engineering C:\unocourses\4350\slides\DefiningThreads

  2. Some existing techniques • An application needing to deal with reusing threads includes • Data structures • and • Methods • ad-hoc basis to deal with the problem • Plus: addresses a pressing issue • Negative: No software reuse, each application dealing with it will have to come up with its own solution. • Of the two apps reviewed: • Not sufficiently good. Distributed Software Engineering C:\unocourses\4350\slides\DefiningThreads

  3. Threading issues to deal with • Expense of thread creation, deallocation. • Reuse of threads • There will be an indirect major issue to deal with as well: • termination of threads being reused. Distributed Software Engineering C:\unocourses\4350\slides\DefiningThreads

  4. Thread reuse • Main ideas • A reusable thread can be designed as a running waiting for a job to execute. When the job is given, thread will execute it. • After execution of job, reusable thread is placed on a hold until a next job arrives. Distributed Software Engineering C:\unocourses\4350\slides\DefiningThreads

  5. Abstracting Running thread’s Job • We can abstract a job as an instance of Runnable. • For jobs with arguments, we can abstract it as a command object wrapped in a runnable instance interface Command { void execute(); } The user passes a command instance, and the implementation of the execution of the command will do: new Runnable( public void run(){ command.execute(); } ) Distributed Software Engineering C:\unocourses\4350\slides\DefiningThreads

  6. Note on Command • If the command’s execute requires parameters • The parameters to the execute() are given as parameters to the Command’s constructor which set instance variables to be used by execute() • If the command ought to be a query, the implementation of command specifies an instance variable which will contain the final result. The implementation will also provide a query to return such value. Distributed Software Engineering C:\unocourses\4350\slides\DefiningThreads

  7. Reusable Thread’s run() • The thread run() method will basically have as body public void run(){ job.run(); } • The questions are: • where will “job” come from. • How to keep the thread’s run() method executing, as we cannot issue start() again on a thread that has been started. Distributed Software Engineering C:\unocourses\4350\slides\DefiningThreads

  8. Jobs data structure • For reusable threads, jobs will be coming from a queue of Runnable. • This queue must be designed to be thread-safe. In particular: • When the queue is empty, any thread dequeing will have to be placed on wait. • If the queue has a max length, then any enqueue request will have to be placed on wait. Distributed Software Engineering C:\unocourses\4350\slides\DefiningThreads

  9. Body of the run() method public run(){ while(!shutDown()){ (Runnable)jobQueue.dequeue().run(); } } • Note that the condition of the loop is to keep the thread running. • When a thread finishes executing a job’s run() method, and the thread is not shutDown() it will proceed to dequeue a job. If there are no jobs, the thread is put on wait() Distributed Software Engineering C:\unocourses\4350\slides\DefiningThreads

  10. Job creation • The client of the pool thread will proceed to request the pool to execute a job • The execute method of the pool is to add the job to the job queue. • Thus as an object the pool thread will have • A constructor for initialization • The main job of this one will be to start worker threads. • An execute method • A shutdown method that will terminate all those threads on wait() for jobs. Distributed Software Engineering C:\unocourses\4350\slides\DefiningThreads

  11. Evaluation • This is a more generic solution, that can be reused. • On the negative side: creating a bunch of threads ahead of time, that may all not be used. • Question: can we design the class so that we only create threads as needed? YES. Distributed Software Engineering C:\unocourses\4350\slides\DefiningThreads

More Related