배열을 길이 단위로 자를 때 range 뒤에 인자를 생각하면 편하다.
x = [1,2,3,4,5,6]
for i in range(0,len(x),2):
0, 2, 4 반환
#아래와 같이 자르기
words = [text[i:i+tok_len] for i in range(0, len(text), tok_len)]
배열에서 순차적으로 앞에 값과 비교하는 로직을 쓸 때 zip 을 사용하면 더 깔끔하게 코드를 짤 수 있다.
#Before
prev = arr[0]
for v in arr[1:]:
if prev > v :
pass
prev = v
#After
for v, prev in zip(arr,arr[1:]+[""]):
#index가 1부터 비교하는 거니까 0일때 위에서 미리 채워주기
if prev > v:
pass
마지막 처리가 애매하면 뒤에 Trash 값을 하나 넣어주자
#마지막 처리가 애매할 때는 이렇게 뒤에 값을 붙여주자
for a in (arr + [""]):
리스트를 자를 때 인덱스 바깥 범위로 자르더라도 에러가 나지 않는다.
arr = [1,2,3,4]
arr[100:] #[]
arr[0:10] #[1,2,3,4]
프로세스가 생성될 때 PCB에 프로세스의 정보들이 저장된다. PCB는 스케쥴러에 의해 컨텍스트 스위칭이 발생할 때 RUN 상태의 프로세스를 일시적으로 저장하는 역할을 한다. 만약 해당 프로세스가 다시 CPU에게 할당받으면 CPU의 레지스터에서 PCB의 정보들은 가져온다.
컨텍스트 스위칭 과정에서 프로세스의 정보를 옮기는 과정이 들어가며 이때는 CPU가 별다른 일을 하지 않아 오버헤드가 발생하게 된다. 멀티 프로세스는 컨텍스트 스위칭이 자주 발생하나 멀티 쓰레딩은 프로세스에 비해 캐시를 비우지 않아 상대적으로 빠르게 컨텍스트 스위칭이 가능하다고 한다.