IP Library › Granted Patent US 7,784,051
Granted Patent B2
US 7,784,051 · App. 11/282,504 · Granted Aug 24, 2010

Cooperative scheduling using coroutines and threads

Assignee: SAP AG
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 7,784,051
App. No.
11/282,504
Granted
Aug 24, 2010
Kind
B2
Abstract

A database system may provide definition of a first plurality of tasks associated with coroutine execution, and a second plurality of tasks associated with task-specific thread execution. Also provided may be spawning of a control thread and a plurality of threads, each of the plurality of threads associated with one of the second plurality of tasks, and running of the control thread to determine if a task of the first plurality of tasks and the second plurality of tasks is associated with coroutine execution or with task-specific thread execution. If the task is determined to be associated with coroutine execution, the control thread may be run to swap a coroutine context of the control thread with a coroutine context of the task. If the task is determined to be associated with thread execution, the control thread may be run to resume a thread associated with the task and to suspend the control thread.

Claims (91)

1. A method comprising:

defining a first plurality of tasks associated with coroutine execution, and a second plurality of tasks associated with task-specific thread execution;

spawning a plurality of threads, each of the plurality of threads associated with one of the second plurality of tasks;

running a control thread to determine if a first task of the first plurality of tasks or the second plurality of tasks is associated with coroutine execution or with task-specific thread execution;

if the first task is determined to be associated with coroutine execution, running the control thread to swap a coroutine context of the control thread with a coroutine context of the task; and

if the first task is determined to be associated with thread execution, running the control thread to resume a first thread associated with the first task and to suspend the control thread.

2. A method according to claim 1 ,

wherein the first task is a highest-priority runnable task of the first plurality of tasks and the second plurality of tasks.

3. A method according to claim 1 , further comprising:

running the control thread to execute program code associated with the first task.

4. A method according to claim 1 , further comprising:

running the first thread to execute program code associated with the first task.

5. A method according to claim 1 , further comprising:

running the first thread associated with the task to execute program code associated with the task;

running the first thread to determine if a second task of the first plurality of tasks or the second plurality of tasks is associated with coroutine execution or with task-specific thread execution;

if the second task is determined to be associated with coroutine execution, running the first thread to resume the control thread and to suspend the first thread; and

if the second task is determined to be associated with thread execution, running the first thread to resume a second thread associated with the second task and to suspend the first thread.

6. A method according to claim 5 , further comprising:

running the control thread to execute program code associated with the second task.

7. A method according to claim 5 , further comprising:

running the second thread to execute program code associated with the second task.

8. A method according to claim 1 , further comprising:

running the control thread to execute program code associated with the first task;

running the control thread to determine if a second task of the first plurality of tasks or the second plurality of tasks is associated with coroutine execution or with task-specific thread execution;

if the second task is determined to be associated with coroutine execution, running the control thread to swap the coroutine context associated with the first task with the coroutine context of the second task; and

if the second task is determined to be associated with thread execution, running the control thread to swap the coroutine context of the first task with the coroutine context of the control thread.

9. A method according to claim 8 , further comprising:

running the control thread to execute program code associated with the second task.

10. A method according to claim 8 , further comprising:

running the control thread to determine if a third task of the first plurality of tasks or the second plurality of tasks is associated with coroutine execution or with task-specific thread execution;

if the third task is determined to be associated with coroutine execution, running the control thread to swap the coroutine context of the control thread with a coroutine context of the third task; and

if the third task is determined to be associated with thread execution, running the control thread to resume a thread associated with the third task and to suspend the control thread.

11. A non-transitory computer-readable medium storing program code executable by a processor, the program code comprising:

code to define a first plurality of tasks associated with coroutine execution, and a second plurality of tasks associated with task-specific thread execution;

code to spawn a plurality of threads, each of the plurality of threads associated with one of the second plurality of tasks;

code to run a control thread to determine if a first task of the first plurality of tasks or the second plurality of tasks is associated with coroutine execution or with task-specific thread execution;

code to run the control thread to swap a coroutine context of the control thread with a coroutine context of the first task, if the first task is determined to be associated with coroutine execution; and

code to run the control thread to resume a first thread associated with the first task and to suspend the control thread, if the first task is determined to be associated with thread execution.

12. A storage medium according to claim 11 ,

wherein the first task is a highest-priority runnable task of the first plurality of tasks and the second plurality of tasks.

13. A storage medium according to claim 11 , the program code further comprising:

code to run the control thread to execute program code associated with the first task.

14. A storage medium according to claim 11 , the program code further comprising:

code to run the first thread to execute program code associated with the first task.

15. A storage medium according to claim 11 , the program code further comprising:

code to run the first thread associated with the first task to execute program code associated with the first task;

code to run the first thread to determine if a second task of the first plurality of tasks or the second plurality of tasks is associated with coroutine execution or with task-specific thread execution;

code to run the first thread to resume the control thread and to suspend the first thread, if the second task is determined to be associated with coroutine execution; and

code to run the first thread to resume a second thread associated with the second task and to suspend the first thread, if the second task is determined to be associated with thread execution.

16. A storage medium according to claim 15 , the program code further comprising:

code to run the control thread to execute program code associated with the second task.

17. A storage medium according to claim 15 , the program code further comprising:

code to run the second thread to execute program code associated with the second task.

18. A storage medium according to claim 11 , the program code further comprising:

code to run the control thread to execute program code associated with the first task;

code to run the control thread to determine if a second task of the first plurality of tasks or the second plurality of tasks is associated with coroutine execution or with task-specific thread execution;

code to run the control thread to swap the coroutine context associated with the first task with the coroutine context of the second task, if the second task is determined to be associated with coroutine execution; and

code to run the control thread to swap the coroutine context of the first task with the coroutine context of the control thread, if the second task is determined to be associated with thread execution.

19. A storage medium according to claim 18 , the program code further comprising:

code to run the control thread to execute program code associated with the second task.

20. A storage medium according to claim 18 , the program code further comprising:

code to run the control thread to determine if a third task of the first plurality of tasks or the second plurality of tasks is associated with coroutine execution or with task-specific thread execution;

code to run the control thread to swap the coroutine context of the control thread with a coroutine context of the third task, if the third task is determined to be associated with coroutine execution; and

code to run the control thread to resume a thread associated with the third task and to suspend the control thread, if the third task is determined to be associated with thread execution.

21. A system comprising:

a database to store data; and

a database management system in communication with the database, the database management system to:

define a first plurality of tasks associated with coroutine execution, and a second plurality of tasks associated with task-specific thread execution;

spawn a plurality of threads, each of the plurality of threads associated with one of the second plurality of tasks;

run a control thread to determine if a first task of the first plurality of tasks or the second plurality of tasks is associated with coroutine execution or with task-specific thread execution;

run the control thread to swap a coroutine context of the control thread with a coroutine context of the first task, if the first task is determined to be associated with coroutine execution; and

run the control thread to resume a first thread associated with the first task and to suspend the control thread, if the first task is determined to be associated with thread execution.

22. A system according to claim 21 , further comprising:

a cache copy to store a copy of a portion of the stored data,

wherein the stored copy is associated with the second plurality of tasks, and

wherein the stored data is associated with the first plurality of tasks.

23. A system according to claim 21 , the database management system further to:

run the first thread associated with the first task to execute program code associated with the first task;

run the first thread to determine if a second task of the first plurality of tasks or the second plurality of tasks is associated with coroutine execution or with task-specific thread execution;

run the first thread to resume the control thread and to suspend the first thread, if the second task is determined to be associated with coroutine execution; and

run the first thread to resume a second thread associated with the second task and to suspend the first thread, if the second task is determined to be associated with thread execution.

24. A system according to claim 21 , the database management system further to:

run the control thread to execute program code associated with the first task;

run the control thread to determine if a second task of the first plurality of tasks or the second plurality of tasks is associated with coroutine execution or with task-specific thread execution;

run the control thread to swap the coroutine context associated with the first task with the coroutine context of the second task, if the second task is determined to be associated with coroutine execution; and

run the control thread to swap the coroutine context of the first task with the coroutine context of the control thread, if the second task is determined to be associated with thread execution.

25. A system according to claim 24 , the database management system further to:

run the control thread to execute program code associated with the second task;

run the control thread to determine if a third task of the first plurality of tasks or the second plurality of tasks is associated with coroutine execution or with task-specific thread execution;

run the control thread to swap the coroutine context of the control thread with a coroutine context of the third task, if the third task is determined to be associated with coroutine execution; and

run the control thread to resume a thread associated with the third task and to suspend the control thread, if the third task is determined to be associated with thread execution.

Assignments (2)
CHANGE OF NAME Recorded Aug 26, 2014
From: SAP AG
To: SAP SE
Reel/Frame 033625/0334 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Nov 18, 2005
From: MENSING, JOERG W.
To: SAP AG
Reel/Frame 017250/0707 →
Continuity (1)
Related Publication 20070118836A1 · May 24, 2007