ThreadWeaver in KDE Frameworks 5

24
ThreadWeaver in KDE Frameworks 5 Demos, New Features, Performance Mirko Boehm <[email protected]> Akademy 2013 1 Friday, July 19, 13

description

Presented on July 14, 2013 at the annual KDE Akademy conference: ThreadWeaver is the concurrency scheduler framework in KDE. It provides a high-level multi-threading API convenient for application programming, combined with powerful features like aggregate tasks, task dependencies and queue policies. With the dawn of KDE Frameworks, ThreadWeaver has been refactored, extensively tested, benchmarked and generally polished. This presentation will introduce the audience to ThreadWeaver programming and central concepts, explain the (few) changes and additions in the API in KDE Frameworks, and show some performance benchmarking results.

Transcript of ThreadWeaver in KDE Frameworks 5

Page 1: ThreadWeaver in KDE Frameworks 5

ThreadWeaver in KDE Frameworks 5Demos, New Features, PerformanceMirko Boehm <[email protected]>Akademy 2013

1Friday, July 19, 13

Page 2: ThreadWeaver in KDE Frameworks 5

Agenda

introduction to ThreadWeaver

key concepts: job aggregates, policies, queues

API changes for Frameworks 5

performance considerations, benchmarks

outlook and new feature quizz

2Friday, July 19, 13

Page 3: ThreadWeaver in KDE Frameworks 5

CWD: ~miroslav@silberpfeil: >whoami

- KDE Contributor since 1997:-- hacking (kdecore, kdepim, applications)-- board member 1999 to 2006-- Desktop Summit 2011- FSFE Team Germany- researching Free Software and Intellectual Property issues at TU Berlin- European Representative, Open Invention Network- Founder/CEO,Endocode AG- married, two kids, lives in BerlinCWD: ~miroslav@silberpfeil: >

3Friday, July 19, 13

Page 4: ThreadWeaver in KDE Frameworks 5

Agenda

introduction to ThreadWeaver

key concepts: job aggregates, policies, queues

API changes for Frameworks 5

performance considerations, benchmarks

outlook and new feature quizz

4Friday, July 19, 13

Page 5: ThreadWeaver in KDE Frameworks 5

Hello WorldDemo time!

5Friday, July 19, 13

Page 6: ThreadWeaver in KDE Frameworks 5

Hello World demo(s)

global ThreadWeaver pool

job memory management

shared pointers

raw pointers, jobs as stack variables

Lambda jobs

6Friday, July 19, 13

Page 7: ThreadWeaver in KDE Frameworks 5

Sequence DemoDemo time!

7Friday, July 19, 13

Page 8: ThreadWeaver in KDE Frameworks 5

Sequence Demo

job aggregates: collections, sequences

job error reporting

sequences abort on failure

signals and slots to communicate

sharing data between jobs

8Friday, July 19, 13

Page 9: ThreadWeaver in KDE Frameworks 5

Image ViewerDemo time!

9Friday, July 19, 13

Page 10: ThreadWeaver in KDE Frameworks 5

Image Viewer

queue policies

resource restrictions

dependencies

job priorities

worker thread count, individual queue instances

10Friday, July 19, 13

Page 11: ThreadWeaver in KDE Frameworks 5

OutlookUse job aggregates to model execution flow graph.(Or: How to draw a sad robot.)

11Friday, July 19, 13

Page 12: ThreadWeaver in KDE Frameworks 5

Agenda

introduction to ThreadWeaver

key concepts: job aggregates, policies, queues

API changes for Frameworks 5

performance considerations, benchmarks

outlook and new feature quizz

12Friday, July 19, 13

Page 13: ThreadWeaver in KDE Frameworks 5

Jobs

units of queueing and execution

shared pointers for memory management

raw pointers for stack variables

success status,

cancellation requests

priorities as a hint to the scheduler

13Friday, July 19, 13

Page 14: ThreadWeaver in KDE Frameworks 5

Queue Policies

decide whether or not a job can be executed

are assigned to jobs

may be shared between jobs or queues

built-ins:

resource restriction policy, dependency policy

custom policies can be implemented

14Friday, July 19, 13

Page 15: ThreadWeaver in KDE Frameworks 5

Queues

manage worker threads

global instance or individual instances

suspend/resume/finish

signaling

15Friday, July 19, 13

Page 16: ThreadWeaver in KDE Frameworks 5

Philosophy

scheduling vs. programmed concurrency

critical path modeling

minimalism (jobs, queueing methods, concepts)

simplicity

16Friday, July 19, 13

Page 17: ThreadWeaver in KDE Frameworks 5

Agenda

introduction to ThreadWeaver

key concepts: job aggregates, policies, queues

API changes for Frameworks 5

performance considerations, benchmarks

outlook and new feature quizz

17Friday, July 19, 13

Page 18: ThreadWeaver in KDE Frameworks 5

API changes

few, but important

shared pointers for jobs

global instance child of QApplication

public Queue class

ExecuteWrapper

all *RunHelper* classes removed

18Friday, July 19, 13

Page 19: ThreadWeaver in KDE Frameworks 5

Agenda

introduction to ThreadWeaver

key concepts: job aggregates, policies, queues

API changes for Frameworks 5

performance considerations, benchmarks

outlook and new feature quizz

19Friday, July 19, 13

Page 20: ThreadWeaver in KDE Frameworks 5

20Friday, July 19, 13

Page 21: ThreadWeaver in KDE Frameworks 5

Agenda

introduction to ThreadWeaver

key concepts: job aggregates, policies, queues

API changes for Frameworks 5

performance considerations, benchmarks

outlook and new feature quizz

21Friday, July 19, 13

Page 22: ThreadWeaver in KDE Frameworks 5

Feature quizz

progress tracking

minijobs

embed QRunnables

Job::execUntilFinished(QEventLoop/QDialog/qApp)

AnyOfCollection

UI elements/visualizations

22Friday, July 19, 13

Page 23: ThreadWeaver in KDE Frameworks 5

Questions?

23Friday, July 19, 13

Page 24: ThreadWeaver in KDE Frameworks 5

References

demos:

github.com/mirkoboehm/ThreadWeaverDemos

benchmarks:

github.com/mirkoboehm/QBenchmarkParser

code:

kdelibs frameworks branch, tier1/threadweaver

24Friday, July 19, 13