Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
à
•
•
•
•
•
•
•
function*	calculatingGenerator(start,	dest)	{
let	value	=	0
for	(let	i =	start;	i <	dest;	i++)	{
if	(i ==	2)	value	*=	10
e...
•
•
•
var	q	:=	new	queue
generator	produce
loop
while	q	is	not	full
create	some	new	items
add	the	items	to	q
yield	consume...
async	Task<Toast>	MakeToastWithButterAndJamAsync(int	number)
{
var	toast	=	await	ToastBreadAsync(number);
ApplyButter(toas...
•
•
•
Class	a{
void	method1(){
method2();
…
}
void	method2(){
…
}
}
•
•
•
•
•
•
•
•
public	final	void	pushMethod(int	entry,	int	numSlots)	{
pushed	=	true;
int	idx =	sp - FRAME_RECORD_SIZE;
long	record	=	dat...
public	final	void	popMethod(int	slots)	{
pushed	=	false;
final	int	oldSP =	sp;
final	int	idx =	oldSP - FRAME_RECORD_SIZE;
...
private	transient	FiberScheduler scheduler	=	
new	FiberForkJoinScheduler("test",	parallelism:1,	monitorType:null,	detaildI...
final	Fiber<Integer>	fiber1	=	new	Fiber<Integer>(scheduler,	new	SuspendableCallable<Integer>()	{
@Override
public	Integer	...
function	()	throws	SuspendExecution {
nested();
}
void nested()	throws	SuspendExecution {
Fiber.park();
}
function	()	{
ne...
•
•
•
•
•
•
@Override
public	final	boolean onLogin(...)	throws	SuspendExecution {
//	load	data	from	db.
UserEntity userEntity =	AsyncA...
• è
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
Upcoming SlideShare
Loading in …5
×
Upcoming SlideShare
What to Upload to SlideShare
Next
Download to read offline and view in fullscreen.

7

Share

Download to read offline

[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기

Download to read offline

※다운로드하시면 더 선명한 자료를 보실 수 있습니다.

복잡하고 어려운 동시성(concurrency) 프로그래밍을 Fiber를 이용하여 성능은 유지하면서 간단하게 작성하는 방법을 알아봅니다.
Java에서 유저 모드 경량 스레드인 Fiber를 배우고 언제 어떻게 사용하면 좋을지 알게 됩니다.

목차
1. 동시성(concurrency) 프로그래밍이 어려운 이유
2. Fiber란 무엇인가?
3. Coroutine은 무엇인가?
4. Java Fiber Quasar
5. Fiber를 이용해 동시성 프로그래밍을 하는 방법
6. Fiber의 성능
7. 적용 사례 소개 (Tardis)
8. Java Fiber의 미래, Project Loom
9. Q&A

대상
- Java로 실시간 게임 서버를 만들고 싶은 분
- Java에서 동시성(concurrency) 프로그래밍을 쉽게 해보고 싶은 분

■관련 동영상: https://youtu.be/7H_ROv5rNIg

Related Books

Free with a 30 day trial from Scribd

See all

[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기

  1. 1. à
  2. 2. • • • •
  3. 3. • • •
  4. 4. function* calculatingGenerator(start, dest) { let value = 0 for (let i = start; i < dest; i++) { if (i == 2) value *= 10 else value += 1 yield value } } const iterator = calculatingGenerator(0, 3) console.log(iterator.next()) // { done: false, value: 1 } console.log(iterator.next()) // { done: false, value: 2 } console.log(iterator.next()) // { done: false, value: 20 } console.log(iterator.next()) // { done: true, value: undefined } • • •
  5. 5. • • • var q := new queue generator produce loop while q is not full create some new items add the items to q yield consume generator consume loop while q is not empty remove some items from q use the items yield produce subroutine dispatcher var d := new dictionary(generator → iterator) d[produce] := start produce d[consume] := start consume var current := produce loop current := next d[current]
  6. 6. async Task<Toast> MakeToastWithButterAndJamAsync(int number) { var toast = await ToastBreadAsync(number); ApplyButter(toast); ApplyJam(toast); return toast; } async function f() { let promise = new Promise((resolve, reject) => { setTimeout(() => resolve("done!"), 1000) }); let result = await promise; // wait till the promise resolves (*) alert(result); // "done!" }
  7. 7. • • • Class a{ void method1(){ method2(); … } void method2(){ … } }
  8. 8. • • • •
  9. 9. • • • •
  10. 10. public final void pushMethod(int entry, int numSlots) { pushed = true; int idx = sp - FRAME_RECORD_SIZE; long record = dataLong[idx]; record = setEntry(record, entry); record = setNumSlots(record, numSlots); dataLong[idx] = record; int nextMethodIdx = sp + numSlots; int nextMethodSP = nextMethodIdx + FRAME_RECORD_SIZE; if (nextMethodSP > dataObject.length) growStack(nextMethodSP); // clear next method's frame record dataLong[nextMethodIdx] = 0L; }
  11. 11. public final void popMethod(int slots) { pushed = false; final int oldSP = sp; final int idx = oldSP - FRAME_RECORD_SIZE; final long record = dataLong[idx]; final int newSP = idx - getPrevNumSlots(record); // clear frame record (probably unnecessary) dataLong[idx] = 0L; // help GC for (int i = oldSP; i < oldSP + slots && i < dataObject.length; i++) dataObject[i] = null; sp = newSP; }
  12. 12. private transient FiberScheduler scheduler = new FiberForkJoinScheduler("test", parallelism:1, monitorType:null, detaildInfo:false); Fiber fiber = new Fiber(scheduler, new SuspendableRunnable() { @Override public void run() throws SuspendExecution { try { System.out.print("Fiber run"); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); fiber.join();
  13. 13. final Fiber<Integer> fiber1 = new Fiber<Integer>(scheduler, new SuspendableCallable<Integer>() { @Override public Integer run() throws SuspendExecution { Fiber.park(100, TimeUnit.MILLISECONDS); return 123; } }).start(); final Fiber<Integer> fiber2 = new Fiber<Integer>(scheduler, new SuspendableCallable<Integer>() { @Override public Integer run() throws SuspendExecution, InterruptedException { try { int res = fiber1.get(); return res; } catch (ExecutionException e) { throw Exceptions.rethrow(e.getCause()); } } }).start(); int res = fiber2.get(); assertThat(res, is(123)); assertThat(fiber1.get(), is(123));
  14. 14. function () throws SuspendExecution { nested(); } void nested() throws SuspendExecution { Fiber.park(); } function () { nested(); } void nested() throws SuspendExecution { Fiber.park(); // occur error!!! }
  15. 15. • • • • • •
  16. 16. @Override public final boolean onLogin(...) throws SuspendExecution { // load data from db. UserEntity userEntity = AsyncAwait.call(RpsConfig.DB_THREAD_POOL,new Callable<UserEntity>() { @Override public UserEntity call() throws Exception { return PersistenceManager.getInstance().findByKey(UserEntity.class, reqMsg.getUserId()); } }); int money = userEntity.getMoney(); // http request FiberHttpRequest fiberHttpRequest = new FiberHttpRequest(httpRequestTestURL); HttpResponse httpResponse = fiberHttpRequest.GET(); TestOption httpRequestOption = httpResponse.getContents(TestOption.class); int getMaxConnTotal = httpRequestOption.getMaxConnTotal(); . .
  17. 17. • è • • •
  18. 18. • • • •
  19. 19. • • • • • • • • • • • •
  20. 20. • • • • • • • •
  21. 21. • • • • • • • • •
  • sunggonSong

    Oct. 30, 2020
  • ssuser468552

    Jan. 30, 2020
  • black4eyes

    Jan. 28, 2020
  • KangYongLee2

    Jan. 28, 2020
  • gunheelee923519

    Jan. 27, 2020
  • DavidPark1208

    Jan. 27, 2020
  • seunghaeom

    Jan. 27, 2020

※다운로드하시면 더 선명한 자료를 보실 수 있습니다. 복잡하고 어려운 동시성(concurrency) 프로그래밍을 Fiber를 이용하여 성능은 유지하면서 간단하게 작성하는 방법을 알아봅니다. Java에서 유저 모드 경량 스레드인 Fiber를 배우고 언제 어떻게 사용하면 좋을지 알게 됩니다. 목차 1. 동시성(concurrency) 프로그래밍이 어려운 이유 2. Fiber란 무엇인가? 3. Coroutine은 무엇인가? 4. Java Fiber Quasar 5. Fiber를 이용해 동시성 프로그래밍을 하는 방법 6. Fiber의 성능 7. 적용 사례 소개 (Tardis) 8. Java Fiber의 미래, Project Loom 9. Q&A 대상 - Java로 실시간 게임 서버를 만들고 싶은 분 - Java에서 동시성(concurrency) 프로그래밍을 쉽게 해보고 싶은 분 ■관련 동영상: https://youtu.be/7H_ROv5rNIg

Views

Total views

700

On Slideshare

0

From embeds

0

Number of embeds

81

Actions

Downloads

18

Shares

0

Comments

0

Likes

7

×