source

정확히 파일이란 무엇입니까?플러시는?

nicesource 2023. 6. 13. 22:25
반응형

정확히 파일이란 무엇입니까?플러시는?

File Objects에 대한 Python 문서에서 다음을 발견했습니다.

flush()파일의 데이터를 디스크에 쓸 필요는 없습니다.사용하다flush()에 이어 이 동작을 확인합니다.

그래서 제 질문은: 파이썬의 정확한 기능은 무엇입니까?flush하고 있나요? 디스크에 데이터를 쓰도록 강요하는 줄 알았는데, 지금 보니 그렇지 않네요. 왜죠?

버퍼링에는 일반적으로 두 가지 수준이 포함됩니다.

  1. 내부 버퍼
  2. 운영 체제 버퍼

내부 버퍼는 프로그래밍 중인 런타임/라이브러리/언어에 의해 생성된 버퍼이며 모든 쓰기에 대한 시스템 호출을 방지하여 작업 속도를 향상시킵니다.대신 파일 개체에 쓸 때 버퍼에 쓰고 버퍼가 가득 찰 때마다 시스템 호출을 사용하여 실제 파일에 데이터를 씁니다.

그러나 운영 체제 버퍼로 인해 데이터가 디스크에 기록되지 않을 수 있습니다.이는 데이터가 런타임에 의해 유지되는 버퍼에서 운영 체제에 의해 유지되는 버퍼로 복사된다는 것을 의미할 수 있습니다.

무언가를 썼다가 버퍼(만)에 저장되고 전원이 차단되면 시스템 전원이 꺼질 때 해당 데이터는 디스크에 없습니다.

그래서, 그것을 돕기 위해 당신은 다음을 가지고 있습니다.flush그리고.fsync메서드, 각 개체에 대한 메서드.

첫번째,flush프로그램 버퍼에 남아 있는 모든 데이터를 실제 파일에 쓰기만 하면 됩니다.일반적으로 이것은 데이터가 프로그램 버퍼에서 운영 체제 버퍼로 복사된다는 것을 의미합니다.

이는 특히 다른 프로세스에서 동일한 파일을 읽기 위해 열어둔 경우 방금 파일로 플러시한 데이터에 액세스할 수 있다는 것을 의미합니다.그러나 반드시 디스크에 "영구적으로" 저장되었음을 의미하지는 않습니다.

그러려면, 당신은 전화를 해야 합니다.os.fsync모든 운영 체제 버퍼가 해당 스토리지 장치와 동기화되도록 하는 방법, 즉 운영 체제 버퍼에서 디스크로 데이터를 복사하는 방법입니다.

일반적으로 두 가지 방법을 모두 사용할 필요는 없지만 실제로 Disk에 저장되는 것에 대한 편집증이 좋은 시나리오라면 두 가지 통화를 모두 지침에 따라 해야 합니다.


2018년 부록.

캐쉬 메커니즘이 있는 Disk는 2013년에 비해 훨씬 일반적으로 사용되므로, 이제는 훨씬 더 많은 수준의 캐슁 및 버퍼가 관련되어 있습니다.이러한 버퍼는 동기/ 플러시 호출로도 처리될 으로 예상되지만 잘 모르겠습니다.

운영 체제가 그렇게 하지 않을 수도 있기 때문입니다.플러시 작업은 파일 데이터를 RAM의 파일 캐시에 강제로 저장하고, 여기서 실제로 디스크로 전송하는 것이 OS의 역할입니다.

내부 버퍼를 플러시하여 OS가 버퍼를 파일에 기록하도록 합니다.Python은 사용자가 다르게 구성하지 않는 한 OS의 기본 버퍼링을 사용합니다.

하지만 때때로 OS는 여전히 협력하지 않기로 선택합니다.특히 Windows/NTFS의 쓰기 지연과 같은 훌륭한 기능이 있습니다.기본적으로 내부 버퍼는 플러시되지만 OS 버퍼는 계속 유지됩니다.은 그서에 OS 에쓰라해합으로 .os.fsync()그런 경우에는

[1] http://docs.python.org/library/stdtypes.html

기본적으로 flush()는 RAM 버퍼를 정리합니다. 이 버퍼의 진정한 힘은 사용자가 RAM 버퍼에 계속 쓸 수 있게 한다는 것입니다. 하지만 파일에 쓰기 기능이 가장 좋고 안전하다고 생각해서는 안 됩니다.더 많은 데이터를 얻기 위해 RAM을 플러시하는 것입니다.데이터가 파일에 안전하게 기록되도록 하려면 close()를 대신 사용합니다.

언급URL : https://stackoverflow.com/questions/7127075/what-exactly-is-file-flush-doing

반응형