thread
-
single threaded vs multi threaded개발/기술 2023. 3. 16. 16:15
싱글 쓰레드 시스템은 쓰레드 하나로 시스템을 구성하는 방식이고 멀티 쓰레드 시스템은 두개 이상의 쓰레드를 이용해서 프로그램을 구성하는 것을 말한다. 멀티 코어가 대세인 하드웨어 환경이라면 쓰레드를 늘려서 시간당 작업량을 늘리는게 당연히 좋지 않을까 하는 생각이 들겠지만 구조마다 장/단점이 있다. Single Thread 특징 Simplicity: 쓰레드가 하나만 있기 때문에 간단한 아키텍처를 구항할 수 있다. 개발하고 배포하고 유지하기가 쉽다. 멀티 쓰레드 환경에서 발생할 수 있는 동시성 이슈 같은 것은 고민하지 않아도 된다. Limited Concurrency: 싱글 쓰레드 환경에서는 요청 하나당 한개만 처리할 수 있다. 동시에 처리할 수 없기 때문에 응답 속도도 느려지고 througput도 좋지 않다..
-
Java - Thread start, run개발 2023. 2. 28. 19:00
start(), run()의 차이 둘다 쓰레드를 실행하기 위한 함수다. 그러나 run() 을 사용하면 run을 호출한 쓰레드에서 작업이 처리되고 start()를 사용하면 쓰레드를 새로 만들어서 처리된다. 병렬 처리를 하고 싶다면 start()를 사용해야 한다. fun main() { ThreadTest().runThread() } class ThreadTest { var counter = 0; private fun increaseCounter() { counter++ } fun runThread() { val threads = ArrayList() (1..100).map { number -> val thread = Thread { sleep((Math.random() * 1000).toLong()) pr..
-
Java - synchronized, wait, notify개발 2023. 2. 28. 12:17
멀티 쓰레드 환경에선 두개 이상의 쓰레드가 동시에 같은 데이터를 접근하는 경우가 발생한다. public class ThreadTest { public void run() { for (int i = 0; i { System.out.println("thread " + finalI + " starts"); method("thread " + finalI + " running"); }); thread.start(); } } private void method(String msg) { System.out.println(msg); try { TimeUnit.SECONDS.sleep(1); } catch (In..
-
멀티쓰레드 동시성개발/컴퓨터사이언스 2021. 6. 5. 14:06
멀티 쓰레드 환경은 하나의 프로세스 내에 여러 개의 쓰레드가 동작할 수 있는 환경을 말한다. 쓰레드는 고유의 작업을 하면서 쓰레드 내에서 할당된 변수 뿐만 아니라 프로세스 내에 있는 변수에도 접근 할 수 있는데 이때 여러 개의 쓰레드가 같은 데이터에 접근하는 경우 경우에 따라 동시성 문제가 발생할 수 있다. 위 그림은 스레드A, B가 프로세스 내에 상주한 정수형 변수 a에 접근하는 경우다. 둘다 read 명령으로 접근 하기 때문에 변수의 값이 변할 염려가 없다. 쓰레드 A, B 모두 변수의 값을 3으로 읽어오기 때문에 예상하지 못한 값을 읽어오게 되는 경우는 없다. 이 경우에는 동시성 문제가 발생하지 않는다. 그런데 위 그림에선 쓰레드 A가 a의 값을 1만큼 더해주는 작업을 하는데 이때는 접근 순서에 따..
-
Thread, Runnable, Callable, ThreadPool개발/안드로이드 2021. 4. 23. 17:29
1. Thread Thread 클래스는 Java 언어에서 비동기 작업시 대표적으로 사용하는 클래스다. 코틀린과 람다를 이용하면 아래와 같이 간단하게 비동기 작업 코드를 짤 수 있어서 짧은 디코딩 작업이나, 연산처리를 할 때 주로 사용된다. fun testThread() { val thread1 = Thread { Thread.sleep(1000) Log.d(this.toString(), "this is test thread1") } val thread2 = Thread { Log.d(this.toString(), "this is test thread2") } thread1.start() thread2.start() } 그런데 Thread를 생성하는 작업은 안드로이드 밑단 운영체제에서 pthread를 생성..